OSDN Git Service

Switchable the main branch on network graph
authorSato Hiroyuki <sathiroyuki@gmail.com>
Tue, 29 Jan 2013 08:25:17 +0000 (17:25 +0900)
committerSato Hiroyuki <sathiroyuki@gmail.com>
Wed, 30 Jan 2013 00:12:03 +0000 (09:12 +0900)
app/controllers/graph_controller.rb [new file with mode: 0644]
app/controllers/projects_controller.rb
app/controllers/refs_controller.rb
app/views/graph/show.html.haml [moved from app/views/projects/graph.html.haml with 63% similarity]
app/views/layouts/project_resource.html.haml
config/routes.rb
lib/extracts_path.rb
lib/gitlab/graph/json_builder.rb
vendor/assets/javascripts/branch-graph.js

diff --git a/app/controllers/graph_controller.rb b/app/controllers/graph_controller.rb
new file mode 100644 (file)
index 0000000..30ec5e8
--- /dev/null
@@ -0,0 +1,18 @@
+class GraphController < ProjectResourceController
+  include ExtractsPath
+
+  # Authorize
+  before_filter :authorize_read_project!
+  before_filter :authorize_code_access!
+  before_filter :require_non_empty_project
+
+  def show
+    respond_to do |format|
+      format.html
+      format.json do
+        graph = Gitlab::Graph::JsonBuilder.new(project, @ref)
+        render :json => graph.to_json
+      end
+    end
+  end
+end
index 6e5e1f9..7978ea6 100644 (file)
@@ -90,16 +90,6 @@ class ProjectsController < ProjectResourceController
     end
   end
 
-  def graph
-    respond_to do |format|
-      format.html
-      format.json do
-        graph = Gitlab::Graph::JsonBuilder.new(project)
-        render :json => graph.to_json
-      end
-    end
-  end
-
   def destroy
     return access_denied! unless can?(current_user, :remove_project, project)
 
index 09d9eb5..0e4dba3 100644 (file)
@@ -13,6 +13,8 @@ class RefsController < ProjectResourceController
       format.html do
         new_path = if params[:destination] == "tree"
                      project_tree_path(@project, (@ref + "/" + params[:path]))
+                   elsif params[:destination] == "graph"
+                     project_graph_path(@project, @ref)
                    else
                      project_commits_path(@project, @ref)
                    end
similarity index 63%
rename from app/views/projects/graph.html.haml
rename to app/views/graph/show.html.haml
index 72d9cb5..ca3a870 100644 (file)
@@ -1,6 +1,7 @@
 %h3.page_title Project Network Graph
 %br
-
+= render partial: 'shared/ref_switcher', locals: {destination: 'graph', path: @path}
+%br
 .graph_holder
   %h4
     %small You can move around the graph by using the arrow keys.
@@ -11,7 +12,8 @@
   var branch_graph;
   $(function(){
     branch_graph = new BranchGraph($("#holder"), {
-      url: '#{url_for controller: 'projects', action: 'graph', format: :json}',
-      commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}'
+      url: '#{project_graph_path(@project, @ref, format: :json)}',
+      commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}',
+      ref: '#{@ref}'
     });
   });
index 14671c5..c19d33c 100644 (file)
@@ -20,8 +20,8 @@
               = link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref)
             = nav_link(controller: %w(commit commits compare repositories protected_branches)) do
               = link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref)
-            = nav_link(path: 'projects#graph') do
-              = link_to "Network", graph_project_path(@project)
+            = nav_link(controller: %w(graph)) do
+              = link_to "Network", project_graph_path(@project, @ref || @repository.root_ref)
 
         - if @project.issues_enabled
           = nav_link(controller: %w(issues milestones labels)) do
index 7ffa081..1abd37f 100644 (file)
@@ -163,7 +163,6 @@ Gitlab::Application.routes.draw do
   resources :projects, constraints: { id: /[a-zA-Z.0-9_\-\/]+/ }, except: [:new, :create, :index], path: "/" do
     member do
       get "wall"
-      get "graph"
       get "files"
     end
 
@@ -173,6 +172,7 @@ Gitlab::Application.routes.draw do
     resources :compare, only: [:index, :create]
     resources :blame,   only: [:show], constraints: {id: /.+/}
     resources :blob,    only: [:show], constraints: {id: /.+/}
+    resources :graph,   only: [:show], constraints: {id: /.+/}
     match "/compare/:from...:to" => "compare#show", as: "compare",
                     :via => [:get, :post], constraints: {from: /.+/, to: /.+/}
 
index 12700e4..976ac01 100644 (file)
@@ -54,9 +54,10 @@ module ExtractsPath
     input.gsub!(/^#{Gitlab.config.gitlab.relative_url_root}/, "")
     # Remove project, actions and all other staff from path
     input.gsub!(/^\/#{Regexp.escape(@project.path_with_namespace)}/, "")
-    input.gsub!(/^\/(tree|commits|blame|blob|refs)\//, "") # remove actions
+    input.gsub!(/^\/(tree|commits|blame|blob|refs|graph)\//, "") # remove actions
     input.gsub!(/\?.*$/, "") # remove stamps suffix
     input.gsub!(/.atom$/, "") # remove rss feed
+    input.gsub!(/.json$/, "") # remove json suffix
     input.gsub!(/\/edit$/, "") # remove edit route part
 
     if input.match(/^([[:alnum:]]{40})(.+)/)
index a3157aa..5a2f27f 100644 (file)
@@ -9,8 +9,9 @@ module Gitlab
         @max_count ||= 650
       end
 
-      def initialize project
+      def initialize project, ref
         @project = project
+        @ref = ref
         @repo = project.repo
         @ref_cache = {}
 
@@ -66,9 +67,9 @@ module Gitlab
         heads.select!{|h| h.is_a? Grit::Head or h.is_a? Grit::Remote}
         # sort heads so the master is top and current branches are closer
         heads.sort! do |a,b|
-          if a.name == "master"
+          if a.name == @ref
             -1
-          elsif b.name == "master"
+          elsif b.name == @ref
             1
           else
             b.commit.committed_date <=> a.commit.committed_date
index 93849c7..cdaa8dd 100644 (file)
@@ -73,7 +73,8 @@
       , cumonth = ""
       , offsetX = 20
       , offsetY = 60
-      , barWidth = Math.max(graphWidth, this.dayCount * 20 + 320);
+      , barWidth = Math.max(graphWidth, this.dayCount * 20 + 320)
+      , scrollLeft = cw;
     
     this.raphael = r;
     
       
       if (this.commits[i].refs) {
         this.appendLabel(x, y, this.commits[i].refs);
+
+        // The main branch is displayed in the center.
+        re = new RegExp('(^| )' + this.options.ref + '( |$)');
+        if (this.commits[i].refs.match(re)) {
+          scrollLeft = x - graphWidth / 2;
+        }
       }
       
       this.appendAnchor(top, this.commits[i], x, y);
     }
     top.toFront();
-    this.element.scrollLeft(cw);
+    this.element.scrollLeft(scrollLeft);
     this.bindEvents();
   };