From c0e3b39792cb7ad479af66c07685eb37e654ccb6 Mon Sep 17 00:00:00 2001
From: Sato Hiroyuki <sathiroyuki@gmail.com>
Date: Sun, 14 Apr 2013 12:09:47 +0000
Subject: [PATCH] Set @options in assing_ref_vars

@options enable to keep params when switching ref.
---
 app/controllers/graph_controller.rb      | 10 ++--------
 app/controllers/refs_controller.rb       |  2 +-
 app/views/graph/_head.html.haml          |  4 +++-
 app/views/graph/show.html.haml           |  3 +--
 app/views/shared/_ref_switcher.html.haml |  2 ++
 lib/extracts_path.rb                     |  5 +++++
 6 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/app/controllers/graph_controller.rb b/app/controllers/graph_controller.rb
index b4bf9565112..22544ad82aa 100644
--- a/app/controllers/graph_controller.rb
+++ b/app/controllers/graph_controller.rb
@@ -8,14 +8,8 @@ class GraphController < ProjectResourceController
   before_filter :require_non_empty_project
 
   def show
-    if params.has_key?(:q)
-      if params[:q].blank?
-        redirect_to project_graph_path(@project, params[:id])
-        return
-      end
-
-      @q = params[:q]
-      @commit = @project.repository.commit(@q) || @commit
+    if @options[:q]
+      @commit = @project.repository.commit(@options[:q]) || @commit
     end
 
     respond_to do |format|
diff --git a/app/controllers/refs_controller.rb b/app/controllers/refs_controller.rb
index 69756bb8ecd..e7def3984f8 100644
--- a/app/controllers/refs_controller.rb
+++ b/app/controllers/refs_controller.rb
@@ -14,7 +14,7 @@ class RefsController < ProjectResourceController
                    elsif params[:destination] == "blob"
                      project_blob_path(@project, (@id))
                    elsif params[:destination] == "graph"
-                     project_graph_path(@project, @id)
+                     project_graph_path(@project, @id, @options)
                    else
                      project_commits_path(@project, @id)
                    end
diff --git a/app/views/graph/_head.html.haml b/app/views/graph/_head.html.haml
index 04a66892584..e6be40aec9c 100644
--- a/app/views/graph/_head.html.haml
+++ b/app/views/graph/_head.html.haml
@@ -10,7 +10,9 @@
       .control-group
         = label_tag :search , "Looking for commit:", class: 'control-label light'
         .controls
-          = text_field_tag :q, @q, placeholder: "Input SHA", class: "search-input xlarge"
+          = text_field_tag :q, @options[:q], placeholder: "Input SHA", class: "search-input xlarge"
           = button_tag type: 'submit', class: 'btn vtop' do
             %i.icon-search
+          - @options.each do |key, value|
+            = hidden_field_tag(key, value, id: nil) unless key == "q"
 
diff --git a/app/views/graph/show.html.haml b/app/views/graph/show.html.haml
index 682d2798906..f361b8b2ea8 100644
--- a/app/views/graph/show.html.haml
+++ b/app/views/graph/show.html.haml
@@ -7,9 +7,8 @@
 
 :javascript
   var branch_graph;
-
   branch_graph = new BranchGraph($("#holder"), {
-    url: '#{project_graph_path(@project, @ref, q: @q, format: :json)}',
+    url: '#{project_graph_path(@project, @ref, @options.merge(format: :json))}',
     commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}',
     ref: '#{@ref}',
     commit_id: '#{@commit.id}'
diff --git a/app/views/shared/_ref_switcher.html.haml b/app/views/shared/_ref_switcher.html.haml
index 8b44cf1944e..dc8c656e12e 100644
--- a/app/views/shared/_ref_switcher.html.haml
+++ b/app/views/shared/_ref_switcher.html.haml
@@ -3,3 +3,5 @@
   = hidden_field_tag :destination, destination
   - if defined?(path)
     = hidden_field_tag :path, path
+  - @options && @options.each do |key, value|
+    = hidden_field_tag key, value, id: nil
diff --git a/lib/extracts_path.rb b/lib/extracts_path.rb
index 6025bb2a9f6..a81c80cfc6f 100644
--- a/lib/extracts_path.rb
+++ b/lib/extracts_path.rb
@@ -106,6 +106,11 @@ module ExtractsPath
     @hex_path = Digest::SHA1.hexdigest(@path)
     @logs_path = logs_file_project_ref_path(@project, @ref, @path)
 
+    # assign allowed options
+    allowed_options = ["filter_ref", "q"]
+    @options = params.select {|key, value| allowed_options.include?(key) && !value.blank? }
+    @options = HashWithIndifferentAccess.new(@options)
+
     raise InvalidPathError unless @tree.exists?
   rescue RuntimeError, NoMethodError, InvalidPathError
     not_found!
-- 
GitLab