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 @@ |
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 | 90 | end |
91 | 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 | 93 | def destroy |
104 | 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 | 13 | format.html do |
14 | 14 | new_path = if params[:destination] == "tree" |
15 | 15 | project_tree_path(@project, (@ref + "/" + params[:path])) |
16 | + elsif params[:destination] == "graph" | |
17 | + project_graph_path(@project, @ref) | |
16 | 18 | else |
17 | 19 | project_commits_path(@project, @ref) |
18 | 20 | end | ... | ... |
... | ... | @@ -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 | 20 | = link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref) |
21 | 21 | = nav_link(controller: %w(commit commits compare repositories protected_branches)) do |
22 | 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 | 26 | - if @project.issues_enabled |
27 | 27 | = nav_link(controller: %w(issues milestones labels)) do | ... | ... |
app/views/projects/graph.html.haml
... | ... | @@ -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 | 163 | resources :projects, constraints: { id: /[a-zA-Z.0-9_\-\/]+/ }, except: [:new, :create, :index], path: "/" do |
164 | 164 | member do |
165 | 165 | get "wall" |
166 | - get "graph" | |
167 | 166 | get "files" |
168 | 167 | end |
169 | 168 | |
... | ... | @@ -173,6 +172,7 @@ Gitlab::Application.routes.draw do |
173 | 172 | resources :compare, only: [:index, :create] |
174 | 173 | resources :blame, only: [:show], constraints: {id: /.+/} |
175 | 174 | resources :blob, only: [:show], constraints: {id: /.+/} |
175 | + resources :graph, only: [:show], constraints: {id: /.+/} | |
176 | 176 | match "/compare/:from...:to" => "compare#show", as: "compare", |
177 | 177 | :via => [:get, :post], constraints: {from: /.+/, to: /.+/} |
178 | 178 | ... | ... |
features/steps/project/project_network_graph.rb
features/steps/shared/paths.rb
... | ... | @@ -141,7 +141,7 @@ module SharedPaths |
141 | 141 | # Stub Graph::JsonBuilder max_size to speed up test (10 commits vs. 650) |
142 | 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 | 145 | end |
146 | 146 | |
147 | 147 | Given "I visit my project's issues page" do | ... | ... |
lib/extracts_path.rb
... | ... | @@ -54,9 +54,10 @@ module ExtractsPath |
54 | 54 | input.gsub!(/^#{Gitlab.config.gitlab.relative_url_root}/, "") |
55 | 55 | # Remove project, actions and all other staff from path |
56 | 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 | 58 | input.gsub!(/\?.*$/, "") # remove stamps suffix |
59 | 59 | input.gsub!(/.atom$/, "") # remove rss feed |
60 | + input.gsub!(/.json$/, "") # remove json suffix | |
60 | 61 | input.gsub!(/\/edit$/, "") # remove edit route part |
61 | 62 | |
62 | 63 | if input.match(/^([[:alnum:]]{40})(.+)/) | ... | ... |
lib/gitlab/graph/json_builder.rb
... | ... | @@ -9,8 +9,9 @@ module Gitlab |
9 | 9 | @max_count ||= 650 |
10 | 10 | end |
11 | 11 | |
12 | - def initialize project | |
12 | + def initialize project, ref | |
13 | 13 | @project = project |
14 | + @ref = ref | |
14 | 15 | @repo = project.repo |
15 | 16 | @ref_cache = {} |
16 | 17 | |
... | ... | @@ -66,9 +67,9 @@ module Gitlab |
66 | 67 | heads.select!{|h| h.is_a? Grit::Head or h.is_a? Grit::Remote} |
67 | 68 | # sort heads so the master is top and current branches are closer |
68 | 69 | heads.sort! do |a,b| |
69 | - if a.name == "master" | |
70 | + if a.name == @ref | |
70 | 71 | -1 |
71 | - elsif b.name == "master" | |
72 | + elsif b.name == @ref | |
72 | 73 | 1 |
73 | 74 | else |
74 | 75 | b.commit.committed_date <=> a.commit.committed_date | ... | ... |
vendor/assets/javascripts/branch-graph.js
... | ... | @@ -73,7 +73,8 @@ |
73 | 73 | , cumonth = "" |
74 | 74 | , offsetX = 20 |
75 | 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 | 79 | this.raphael = r; |
79 | 80 | |
... | ... | @@ -145,12 +146,18 @@ |
145 | 146 | |
146 | 147 | if (this.commits[i].refs) { |
147 | 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 | 157 | this.appendAnchor(top, this.commits[i], x, y); |
151 | 158 | } |
152 | 159 | top.toFront(); |
153 | - this.element.scrollLeft(cw); | |
160 | + this.element.scrollLeft(scrollLeft); | |
154 | 161 | this.bindEvents(); |
155 | 162 | }; |
156 | 163 | ... | ... |