Commit 8c50707dd4c9c0ca21f373ebd9fea30eb1b606b4
Exists in
master
and in
4 other branches
Merge pull request #2823 from hiroponz/switchable-branch-on-network-graph
Switchable the main branch on network graph
Showing
12 changed files
with
59 additions
and
38 deletions
Show diff stats
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +class GraphController < ProjectResourceController | ||
2 | + include ExtractsPath | ||
3 | + | ||
4 | + # Authorize | ||
5 | + before_filter :authorize_read_project! | ||
6 | + before_filter :authorize_code_access! | ||
7 | + before_filter :require_non_empty_project | ||
8 | + | ||
9 | + def show | ||
10 | + respond_to do |format| | ||
11 | + format.html | ||
12 | + format.json do | ||
13 | + graph = Gitlab::Graph::JsonBuilder.new(project, @ref) | ||
14 | + render :json => graph.to_json | ||
15 | + end | ||
16 | + end | ||
17 | + end | ||
18 | +end |
app/controllers/projects_controller.rb
@@ -90,16 +90,6 @@ class ProjectsController < ProjectResourceController | @@ -90,16 +90,6 @@ class ProjectsController < ProjectResourceController | ||
90 | end | 90 | end |
91 | end | 91 | end |
92 | 92 | ||
93 | - def graph | ||
94 | - respond_to do |format| | ||
95 | - format.html | ||
96 | - format.json do | ||
97 | - graph = Gitlab::Graph::JsonBuilder.new(project) | ||
98 | - render :json => graph.to_json | ||
99 | - end | ||
100 | - end | ||
101 | - end | ||
102 | - | ||
103 | def destroy | 93 | def destroy |
104 | return access_denied! unless can?(current_user, :remove_project, project) | 94 | return access_denied! unless can?(current_user, :remove_project, project) |
105 | 95 |
app/controllers/refs_controller.rb
@@ -13,6 +13,8 @@ class RefsController < ProjectResourceController | @@ -13,6 +13,8 @@ class RefsController < ProjectResourceController | ||
13 | format.html do | 13 | format.html do |
14 | new_path = if params[:destination] == "tree" | 14 | new_path = if params[:destination] == "tree" |
15 | project_tree_path(@project, (@ref + "/" + params[:path])) | 15 | project_tree_path(@project, (@ref + "/" + params[:path])) |
16 | + elsif params[:destination] == "graph" | ||
17 | + project_graph_path(@project, @ref) | ||
16 | else | 18 | else |
17 | project_commits_path(@project, @ref) | 19 | project_commits_path(@project, @ref) |
18 | end | 20 | end |
@@ -0,0 +1,19 @@ | @@ -0,0 +1,19 @@ | ||
1 | +%h3.page_title Project Network Graph | ||
2 | +%br | ||
3 | += render partial: 'shared/ref_switcher', locals: {destination: 'graph', path: @path} | ||
4 | +%br | ||
5 | +.graph_holder | ||
6 | + %h4 | ||
7 | + %small You can move around the graph by using the arrow keys. | ||
8 | + #holder.graph | ||
9 | + .loading.loading-gray | ||
10 | + | ||
11 | +:javascript | ||
12 | + var branch_graph; | ||
13 | + $(function(){ | ||
14 | + branch_graph = new BranchGraph($("#holder"), { | ||
15 | + url: '#{project_graph_path(@project, @ref, format: :json)}', | ||
16 | + commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}', | ||
17 | + ref: '#{@ref}' | ||
18 | + }); | ||
19 | + }); |
app/views/layouts/project_resource.html.haml
@@ -20,8 +20,8 @@ | @@ -20,8 +20,8 @@ | ||
20 | = link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref) | 20 | = link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref) |
21 | = nav_link(controller: %w(commit commits compare repositories protected_branches)) do | 21 | = nav_link(controller: %w(commit commits compare repositories protected_branches)) do |
22 | = link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref) | 22 | = link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref) |
23 | - = nav_link(path: 'projects#graph') do | ||
24 | - = link_to "Network", graph_project_path(@project) | 23 | + = nav_link(controller: %w(graph)) do |
24 | + = link_to "Network", project_graph_path(@project, @ref || @repository.root_ref) | ||
25 | 25 | ||
26 | - if @project.issues_enabled | 26 | - if @project.issues_enabled |
27 | = nav_link(controller: %w(issues milestones labels)) do | 27 | = nav_link(controller: %w(issues milestones labels)) do |
app/views/projects/graph.html.haml
@@ -1,17 +0,0 @@ | @@ -1,17 +0,0 @@ | ||
1 | -%h3.page_title Project Network Graph | ||
2 | -%br | ||
3 | - | ||
4 | -.graph_holder | ||
5 | - %h4 | ||
6 | - %small You can move around the graph by using the arrow keys. | ||
7 | - #holder.graph | ||
8 | - .loading.loading-gray | ||
9 | - | ||
10 | -:javascript | ||
11 | - var branch_graph; | ||
12 | - $(function(){ | ||
13 | - branch_graph = new BranchGraph($("#holder"), { | ||
14 | - url: '#{url_for controller: 'projects', action: 'graph', format: :json}', | ||
15 | - commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}' | ||
16 | - }); | ||
17 | - }); |
config/routes.rb
@@ -163,7 +163,6 @@ Gitlab::Application.routes.draw do | @@ -163,7 +163,6 @@ Gitlab::Application.routes.draw do | ||
163 | resources :projects, constraints: { id: /[a-zA-Z.0-9_\-\/]+/ }, except: [:new, :create, :index], path: "/" do | 163 | resources :projects, constraints: { id: /[a-zA-Z.0-9_\-\/]+/ }, except: [:new, :create, :index], path: "/" do |
164 | member do | 164 | member do |
165 | get "wall" | 165 | get "wall" |
166 | - get "graph" | ||
167 | get "files" | 166 | get "files" |
168 | end | 167 | end |
169 | 168 | ||
@@ -173,6 +172,7 @@ Gitlab::Application.routes.draw do | @@ -173,6 +172,7 @@ Gitlab::Application.routes.draw do | ||
173 | resources :compare, only: [:index, :create] | 172 | resources :compare, only: [:index, :create] |
174 | resources :blame, only: [:show], constraints: {id: /.+/} | 173 | resources :blame, only: [:show], constraints: {id: /.+/} |
175 | resources :blob, only: [:show], constraints: {id: /.+/} | 174 | resources :blob, only: [:show], constraints: {id: /.+/} |
175 | + resources :graph, only: [:show], constraints: {id: /.+/} | ||
176 | match "/compare/:from...:to" => "compare#show", as: "compare", | 176 | match "/compare/:from...:to" => "compare#show", as: "compare", |
177 | :via => [:get, :post], constraints: {from: /.+/, to: /.+/} | 177 | :via => [:get, :post], constraints: {from: /.+/, to: /.+/} |
178 | 178 |
features/steps/project/project_network_graph.rb
@@ -14,6 +14,6 @@ class ProjectNetworkGraph < Spinach::FeatureSteps | @@ -14,6 +14,6 @@ class ProjectNetworkGraph < Spinach::FeatureSteps | ||
14 | Gitlab::Graph::JsonBuilder.stub(max_count: 10) | 14 | Gitlab::Graph::JsonBuilder.stub(max_count: 10) |
15 | 15 | ||
16 | project = Project.find_by_name("Shop") | 16 | project = Project.find_by_name("Shop") |
17 | - visit graph_project_path(project) | 17 | + visit project_graph_path(project, "master") |
18 | end | 18 | end |
19 | end | 19 | end |
features/steps/shared/paths.rb
@@ -141,7 +141,7 @@ module SharedPaths | @@ -141,7 +141,7 @@ module SharedPaths | ||
141 | # Stub Graph::JsonBuilder max_size to speed up test (10 commits vs. 650) | 141 | # Stub Graph::JsonBuilder max_size to speed up test (10 commits vs. 650) |
142 | Gitlab::Graph::JsonBuilder.stub(max_count: 10) | 142 | Gitlab::Graph::JsonBuilder.stub(max_count: 10) |
143 | 143 | ||
144 | - visit graph_project_path(@project) | 144 | + visit project_graph_path(@project, root_ref) |
145 | end | 145 | end |
146 | 146 | ||
147 | Given "I visit my project's issues page" do | 147 | Given "I visit my project's issues page" do |
lib/extracts_path.rb
@@ -54,9 +54,10 @@ module ExtractsPath | @@ -54,9 +54,10 @@ module ExtractsPath | ||
54 | input.gsub!(/^#{Gitlab.config.gitlab.relative_url_root}/, "") | 54 | input.gsub!(/^#{Gitlab.config.gitlab.relative_url_root}/, "") |
55 | # Remove project, actions and all other staff from path | 55 | # Remove project, actions and all other staff from path |
56 | input.gsub!(/^\/#{Regexp.escape(@project.path_with_namespace)}/, "") | 56 | input.gsub!(/^\/#{Regexp.escape(@project.path_with_namespace)}/, "") |
57 | - input.gsub!(/^\/(tree|commits|blame|blob|refs)\//, "") # remove actions | 57 | + input.gsub!(/^\/(tree|commits|blame|blob|refs|graph)\//, "") # remove actions |
58 | input.gsub!(/\?.*$/, "") # remove stamps suffix | 58 | input.gsub!(/\?.*$/, "") # remove stamps suffix |
59 | input.gsub!(/.atom$/, "") # remove rss feed | 59 | input.gsub!(/.atom$/, "") # remove rss feed |
60 | + input.gsub!(/.json$/, "") # remove json suffix | ||
60 | input.gsub!(/\/edit$/, "") # remove edit route part | 61 | input.gsub!(/\/edit$/, "") # remove edit route part |
61 | 62 | ||
62 | if input.match(/^([[:alnum:]]{40})(.+)/) | 63 | if input.match(/^([[:alnum:]]{40})(.+)/) |
lib/gitlab/graph/json_builder.rb
@@ -9,8 +9,9 @@ module Gitlab | @@ -9,8 +9,9 @@ module Gitlab | ||
9 | @max_count ||= 650 | 9 | @max_count ||= 650 |
10 | end | 10 | end |
11 | 11 | ||
12 | - def initialize project | 12 | + def initialize project, ref |
13 | @project = project | 13 | @project = project |
14 | + @ref = ref | ||
14 | @repo = project.repo | 15 | @repo = project.repo |
15 | @ref_cache = {} | 16 | @ref_cache = {} |
16 | 17 | ||
@@ -66,9 +67,9 @@ module Gitlab | @@ -66,9 +67,9 @@ module Gitlab | ||
66 | heads.select!{|h| h.is_a? Grit::Head or h.is_a? Grit::Remote} | 67 | heads.select!{|h| h.is_a? Grit::Head or h.is_a? Grit::Remote} |
67 | # sort heads so the master is top and current branches are closer | 68 | # sort heads so the master is top and current branches are closer |
68 | heads.sort! do |a,b| | 69 | heads.sort! do |a,b| |
69 | - if a.name == "master" | 70 | + if a.name == @ref |
70 | -1 | 71 | -1 |
71 | - elsif b.name == "master" | 72 | + elsif b.name == @ref |
72 | 1 | 73 | 1 |
73 | else | 74 | else |
74 | b.commit.committed_date <=> a.commit.committed_date | 75 | b.commit.committed_date <=> a.commit.committed_date |
vendor/assets/javascripts/branch-graph.js
@@ -73,7 +73,8 @@ | @@ -73,7 +73,8 @@ | ||
73 | , cumonth = "" | 73 | , cumonth = "" |
74 | , offsetX = 20 | 74 | , offsetX = 20 |
75 | , offsetY = 60 | 75 | , offsetY = 60 |
76 | - , barWidth = Math.max(graphWidth, this.dayCount * 20 + 320); | 76 | + , barWidth = Math.max(graphWidth, this.dayCount * 20 + 320) |
77 | + , scrollLeft = cw; | ||
77 | 78 | ||
78 | this.raphael = r; | 79 | this.raphael = r; |
79 | 80 | ||
@@ -145,12 +146,18 @@ | @@ -145,12 +146,18 @@ | ||
145 | 146 | ||
146 | if (this.commits[i].refs) { | 147 | if (this.commits[i].refs) { |
147 | this.appendLabel(x, y, this.commits[i].refs); | 148 | this.appendLabel(x, y, this.commits[i].refs); |
149 | + | ||
150 | + // The main branch is displayed in the center. | ||
151 | + re = new RegExp('(^| )' + this.options.ref + '( |$)'); | ||
152 | + if (this.commits[i].refs.match(re)) { | ||
153 | + scrollLeft = x - graphWidth / 2; | ||
154 | + } | ||
148 | } | 155 | } |
149 | 156 | ||
150 | this.appendAnchor(top, this.commits[i], x, y); | 157 | this.appendAnchor(top, this.commits[i], x, y); |
151 | } | 158 | } |
152 | top.toFront(); | 159 | top.toFront(); |
153 | - this.element.scrollLeft(cw); | 160 | + this.element.scrollLeft(scrollLeft); |
154 | this.bindEvents(); | 161 | this.bindEvents(); |
155 | }; | 162 | }; |
156 | 163 |