Commit 038d40f0f5b202fe9ed133fdf9de1774bdbc8ede
1 parent
9e2c8d94
Exists in
master
and in
4 other branches
Solve inconsistency between network graph & stat graphs
Showing
21 changed files
with
173 additions
and
167 deletions
Show diff stats
app/controllers/graph_controller.rb
@@ -1,23 +0,0 @@ | @@ -1,23 +0,0 @@ | ||
1 | -class GraphController < ProjectResourceController | ||
2 | - include ExtractsPath | ||
3 | - include ApplicationHelper | ||
4 | - | ||
5 | - # Authorize | ||
6 | - before_filter :authorize_read_project! | ||
7 | - before_filter :authorize_code_access! | ||
8 | - before_filter :require_non_empty_project | ||
9 | - | ||
10 | - def show | ||
11 | - if @options[:q] | ||
12 | - @commit = @project.repository.commit(@options[:q]) || @commit | ||
13 | - end | ||
14 | - | ||
15 | - respond_to do |format| | ||
16 | - format.html | ||
17 | - | ||
18 | - format.json do | ||
19 | - @graph = Network::Graph.new(project, @ref, @commit, @options[:filter_ref]) | ||
20 | - end | ||
21 | - end | ||
22 | - end | ||
23 | -end |
@@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
1 | +class GraphsController < ProjectResourceController | ||
2 | + # Authorize | ||
3 | + before_filter :authorize_read_project! | ||
4 | + before_filter :authorize_code_access! | ||
5 | + before_filter :require_non_empty_project | ||
6 | + | ||
7 | + def show | ||
8 | + respond_to do |format| | ||
9 | + format.html | ||
10 | + format.js do | ||
11 | + @repo = @project.repository | ||
12 | + @stats = Gitlab::Git::GitStats.new(@repo.raw, @repo.root_ref) | ||
13 | + @log = @stats.parsed_log.to_json | ||
14 | + end | ||
15 | + end | ||
16 | + end | ||
17 | +end |
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +class NetworkController < ProjectResourceController | ||
2 | + include ExtractsPath | ||
3 | + include ApplicationHelper | ||
4 | + | ||
5 | + # Authorize | ||
6 | + before_filter :authorize_read_project! | ||
7 | + before_filter :authorize_code_access! | ||
8 | + before_filter :require_non_empty_project | ||
9 | + | ||
10 | + def show | ||
11 | + if @options[:q] | ||
12 | + @commit = @project.repository.commit(@options[:q]) || @commit | ||
13 | + end | ||
14 | + | ||
15 | + respond_to do |format| | ||
16 | + format.html | ||
17 | + | ||
18 | + format.json do | ||
19 | + @graph = Network::Graph.new(project, @ref, @commit, @options[:filter_ref]) | ||
20 | + end | ||
21 | + end | ||
22 | + end | ||
23 | +end |
app/controllers/refs_controller.rb
@@ -14,7 +14,7 @@ class RefsController < ProjectResourceController | @@ -14,7 +14,7 @@ class RefsController < ProjectResourceController | ||
14 | elsif params[:destination] == "blob" | 14 | elsif params[:destination] == "blob" |
15 | project_blob_path(@project, (@id)) | 15 | project_blob_path(@project, (@id)) |
16 | elsif params[:destination] == "graph" | 16 | elsif params[:destination] == "graph" |
17 | - project_graph_path(@project, @id, @options) | 17 | + project_network_path(@project, @id, @options) |
18 | else | 18 | else |
19 | project_commits_path(@project, @id) | 19 | project_commits_path(@project, @id) |
20 | end | 20 | end |
app/controllers/stat_graph_controller.rb
@@ -1,17 +0,0 @@ | @@ -1,17 +0,0 @@ | ||
1 | -class StatGraphController < ProjectResourceController | ||
2 | - # Authorize | ||
3 | - before_filter :authorize_read_project! | ||
4 | - before_filter :authorize_code_access! | ||
5 | - before_filter :require_non_empty_project | ||
6 | - | ||
7 | - def show | ||
8 | - respond_to do |format| | ||
9 | - format.html | ||
10 | - format.js do | ||
11 | - @repo = @project.repository | ||
12 | - @stats = Gitlab::Git::GitStats.new(@repo.raw, @repo.root_ref) | ||
13 | - @log = @stats.parsed_log.to_json | ||
14 | - end | ||
15 | - end | ||
16 | - end | ||
17 | -end |
app/views/graph/_head.html.haml
@@ -1,26 +0,0 @@ | @@ -1,26 +0,0 @@ | ||
1 | -%h3.page_title Project Network Graph | ||
2 | -%hr | ||
3 | - | ||
4 | -.clearfix | ||
5 | - .pull-left | ||
6 | - = render partial: 'shared/ref_switcher', locals: {destination: 'graph'} | ||
7 | - .pull-left | ||
8 | - = form_tag project_graph_path(@project, @id), method: :get do |f| | ||
9 | - .control-group | ||
10 | - = label_tag :filter_ref, "Show only selected ref", class: 'control-label light' | ||
11 | - .controls | ||
12 | - = check_box_tag :filter_ref, 1, @options[:filter_ref] | ||
13 | - - @options.each do |key, value| | ||
14 | - = hidden_field_tag(key, value, id: nil) unless key == "filter_ref" | ||
15 | - | ||
16 | - .search.pull-right | ||
17 | - = form_tag project_graph_path(@project, @id), method: :get do |f| | ||
18 | - .control-group | ||
19 | - = label_tag :search , "Looking for commit:", class: 'control-label light' | ||
20 | - .controls | ||
21 | - = text_field_tag :q, @options[:q], placeholder: "Input SHA", class: "search-input xlarge" | ||
22 | - = button_tag type: 'submit', class: 'btn vtop' do | ||
23 | - %i.icon-search | ||
24 | - - @options.each do |key, value| | ||
25 | - = hidden_field_tag(key, value, id: nil) unless key == "q" | ||
26 | - |
app/views/graph/show.html.haml
@@ -1,18 +0,0 @@ | @@ -1,18 +0,0 @@ | ||
1 | -= render "head" | ||
2 | -.graph_holder | ||
3 | - %h4 | ||
4 | - %small You can move around the graph by using the arrow keys. | ||
5 | - #holder.graph | ||
6 | - .loading.loading-gray | ||
7 | - | ||
8 | -:javascript | ||
9 | - var branch_graph; | ||
10 | - $("#filter_ref").click(function() { | ||
11 | - $(this).closest('form').submit(); | ||
12 | - }); | ||
13 | - branch_graph = new BranchGraph($("#holder"), { | ||
14 | - url: '#{project_graph_path(@project, @ref, @options.merge(format: :json))}', | ||
15 | - commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}', | ||
16 | - ref: '#{@ref}', | ||
17 | - commit_id: '#{@commit.id}' | ||
18 | - }); |
app/views/graph/show.json.erb
@@ -1,23 +0,0 @@ | @@ -1,23 +0,0 @@ | ||
1 | -<% self.formats = ["html"] %> | ||
2 | - | ||
3 | -<%= raw( | ||
4 | - { | ||
5 | - days: @graph.days.compact.map { |d| [d.day, d.strftime("%b")] }, | ||
6 | - commits: @graph.commits.map do |c| | ||
7 | - { | ||
8 | - parents: parents_zip_spaces(c.parents(@graph.map), c.parent_spaces), | ||
9 | - author: { | ||
10 | - name: c.author_name, | ||
11 | - email: c.author_email, | ||
12 | - icon: gravatar_icon(c.author_email, 20) | ||
13 | - }, | ||
14 | - time: c.time, | ||
15 | - space: c.spaces.first, | ||
16 | - refs: get_refs(c), | ||
17 | - id: c.sha, | ||
18 | - date: c.date, | ||
19 | - message: c.message, | ||
20 | - } | ||
21 | - end | ||
22 | - }.to_json | ||
23 | -) %> |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
1 | +.loading-graph | ||
2 | + %center | ||
3 | + .loading | ||
4 | + %h3.page_title Building repository graph. Please wait a moment. | ||
5 | + | ||
6 | +.stat-graph | ||
7 | + .header.clearfix | ||
8 | + .pull-right | ||
9 | + %select | ||
10 | + %option{:value => "commits"} Commits | ||
11 | + %option{:value => "additions"} Additions | ||
12 | + %option{:value => "deletions"} Deletions | ||
13 | + %h3#date_header.page_title | ||
14 | + %input#brush_change{:type => "hidden"} | ||
15 | + .graphs | ||
16 | + #contributors-master | ||
17 | + #contributors.clearfix | ||
18 | + %ol.contributors-list.clearfix | ||
19 | + | ||
20 | +:javascript | ||
21 | + $(".stat-graph").hide(); | ||
22 | + | ||
23 | + $.ajax({ | ||
24 | + type: "GET", | ||
25 | + url: location.href, | ||
26 | + complete: function() { | ||
27 | + $(".loading-graph").hide(); | ||
28 | + $(".stat-graph").show(); | ||
29 | + }, | ||
30 | + dataType: "script" | ||
31 | + }); |
@@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
1 | +:plain | ||
2 | + controller = new ContributorsStatGraph | ||
3 | + controller.init(#{@log}) | ||
4 | + | ||
5 | + $("select").change( function () { | ||
6 | + var field = $(this).val() | ||
7 | + controller.set_current_field(field) | ||
8 | + controller.redraw_master() | ||
9 | + controller.redraw_authors() | ||
10 | + }) | ||
11 | + | ||
12 | + $("#brush_change").change( function () { | ||
13 | + controller.change_date_header() | ||
14 | + controller.redraw_authors() | ||
15 | + }) | ||
16 | + |
app/views/layouts/nav/_project.html.haml
@@ -9,10 +9,10 @@ | @@ -9,10 +9,10 @@ | ||
9 | = link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref) | 9 | = link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref) |
10 | = nav_link(controller: %w(commit commits compare repositories protected_branches)) do | 10 | = nav_link(controller: %w(commit commits compare repositories protected_branches)) do |
11 | = link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref) | 11 | = link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref) |
12 | - = nav_link(controller: %w(graph)) do | ||
13 | - = link_to "Network", project_graph_path(@project, @ref || @repository.root_ref) | ||
14 | - = nav_link(controller: %w(stat_graph)) do | ||
15 | - = link_to "Graphs", project_stat_graph_path(@project, @ref || @repository.root_ref) | 12 | + = nav_link(controller: %w(network)) do |
13 | + = link_to "Network", project_network_path(@project, @ref || @repository.root_ref) | ||
14 | + = nav_link(controller: %w(graphs)) do | ||
15 | + = link_to "Graphs", project_graph_path(@project, @ref || @repository.root_ref) | ||
16 | 16 | ||
17 | - if @project.issues_enabled | 17 | - if @project.issues_enabled |
18 | = nav_link(controller: %w(issues milestones labels)) do | 18 | = nav_link(controller: %w(issues milestones labels)) do |
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +%h3.page_title Project Network Graph | ||
2 | +%hr | ||
3 | + | ||
4 | +.clearfix | ||
5 | + .pull-left | ||
6 | + = render partial: 'shared/ref_switcher', locals: {destination: 'graph'} | ||
7 | + .pull-left | ||
8 | + = form_tag project_network_path(@project, @id), method: :get do |f| | ||
9 | + .control-group | ||
10 | + = label_tag :filter_ref, "Show only selected ref", class: 'control-label light' | ||
11 | + .controls | ||
12 | + = check_box_tag :filter_ref, 1, @options[:filter_ref] | ||
13 | + - @options.each do |key, value| | ||
14 | + = hidden_field_tag(key, value, id: nil) unless key == "filter_ref" | ||
15 | + | ||
16 | + .search.pull-right | ||
17 | + = form_tag project_network_path(@project, @id), method: :get do |f| | ||
18 | + .control-group | ||
19 | + = label_tag :search , "Looking for commit:", class: 'control-label light' | ||
20 | + .controls | ||
21 | + = text_field_tag :q, @options[:q], placeholder: "Input SHA", class: "search-input xlarge" | ||
22 | + = button_tag type: 'submit', class: 'btn vtop' do | ||
23 | + %i.icon-search | ||
24 | + - @options.each do |key, value| | ||
25 | + = hidden_field_tag(key, value, id: nil) unless key == "q" | ||
26 | + |
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | += render "head" | ||
2 | +.graph_holder | ||
3 | + %h4 | ||
4 | + %small You can move around the graph by using the arrow keys. | ||
5 | + #holder.graph | ||
6 | + .loading.loading-gray | ||
7 | + | ||
8 | +:javascript | ||
9 | + var branch_graph; | ||
10 | + $("#filter_ref").click(function() { | ||
11 | + $(this).closest('form').submit(); | ||
12 | + }); | ||
13 | + branch_graph = new BranchGraph($("#holder"), { | ||
14 | + url: '#{project_network_path(@project, @ref, @options.merge(format: :json))}', | ||
15 | + commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}', | ||
16 | + ref: '#{@ref}', | ||
17 | + commit_id: '#{@commit.id}' | ||
18 | + }); |
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +<% self.formats = ["html"] %> | ||
2 | + | ||
3 | +<%= raw( | ||
4 | + { | ||
5 | + days: @graph.days.compact.map { |d| [d.day, d.strftime("%b")] }, | ||
6 | + commits: @graph.commits.map do |c| | ||
7 | + { | ||
8 | + parents: parents_zip_spaces(c.parents(@graph.map), c.parent_spaces), | ||
9 | + author: { | ||
10 | + name: c.author_name, | ||
11 | + email: c.author_email, | ||
12 | + icon: gravatar_icon(c.author_email, 20) | ||
13 | + }, | ||
14 | + time: c.time, | ||
15 | + space: c.spaces.first, | ||
16 | + refs: get_refs(c), | ||
17 | + id: c.sha, | ||
18 | + date: c.date, | ||
19 | + message: c.message, | ||
20 | + } | ||
21 | + end | ||
22 | + }.to_json | ||
23 | +) %> |
app/views/stat_graph/show.html.haml
@@ -1,31 +0,0 @@ | @@ -1,31 +0,0 @@ | ||
1 | -.loading-graph | ||
2 | - %center | ||
3 | - .loading | ||
4 | - %h3.page_title Building repository graph. Please wait a moment. | ||
5 | - | ||
6 | -.stat-graph | ||
7 | - .header.clearfix | ||
8 | - .pull-right | ||
9 | - %select | ||
10 | - %option{:value => "commits"} Commits | ||
11 | - %option{:value => "additions"} Additions | ||
12 | - %option{:value => "deletions"} Deletions | ||
13 | - %h3#date_header.page_title | ||
14 | - %input#brush_change{:type => "hidden"} | ||
15 | - .graphs | ||
16 | - #contributors-master | ||
17 | - #contributors.clearfix | ||
18 | - %ol.contributors-list.clearfix | ||
19 | - | ||
20 | -:javascript | ||
21 | - $(".stat-graph").hide(); | ||
22 | - | ||
23 | - $.ajax({ | ||
24 | - type: "GET", | ||
25 | - url: location.href, | ||
26 | - complete: function() { | ||
27 | - $(".loading-graph").hide(); | ||
28 | - $(".stat-graph").show(); | ||
29 | - }, | ||
30 | - dataType: "script" | ||
31 | - }); |
app/views/stat_graph/show.js.haml
@@ -1,16 +0,0 @@ | @@ -1,16 +0,0 @@ | ||
1 | -:plain | ||
2 | - controller = new ContributorsStatGraph | ||
3 | - controller.init(#{@log}) | ||
4 | - | ||
5 | - $("select").change( function () { | ||
6 | - var field = $(this).val() | ||
7 | - controller.set_current_field(field) | ||
8 | - controller.redraw_master() | ||
9 | - controller.redraw_authors() | ||
10 | - }) | ||
11 | - | ||
12 | - $("#brush_change").change( function () { | ||
13 | - controller.change_date_header() | ||
14 | - controller.redraw_authors() | ||
15 | - }) | ||
16 | - |
config/routes.rb
@@ -190,8 +190,8 @@ Gitlab::Application.routes.draw do | @@ -190,8 +190,8 @@ Gitlab::Application.routes.draw do | ||
190 | resources :commits, only: [:show], constraints: {id: /(?:[^.]|\.(?!atom$))+/, format: /atom/} | 190 | resources :commits, only: [:show], constraints: {id: /(?:[^.]|\.(?!atom$))+/, format: /atom/} |
191 | resources :compare, only: [:index, :create] | 191 | resources :compare, only: [:index, :create] |
192 | resources :blame, only: [:show], constraints: {id: /.+/} | 192 | resources :blame, only: [:show], constraints: {id: /.+/} |
193 | - resources :graph, only: [:show], constraints: {id: /(?:[^.]|\.(?!json$))+/, format: /json/} | ||
194 | - resources :stat_graph, only: [:show], constraints: {id: /(?:[^.]|\.(?!json$))+/, format: /json/} | 193 | + resources :network, only: [:show], constraints: {id: /(?:[^.]|\.(?!json$))+/, format: /json/} |
194 | + resources :graphs, only: [:show], constraints: {id: /(?:[^.]|\.(?!json$))+/, format: /json/} | ||
195 | match "/compare/:from...:to" => "compare#show", as: "compare", via: [:get, :post], constraints: {from: /.+/, to: /.+/} | 195 | match "/compare/:from...:to" => "compare#show", as: "compare", via: [:get, :post], constraints: {from: /.+/, to: /.+/} |
196 | 196 | ||
197 | scope module: :projects do | 197 | scope module: :projects do |
features/steps/project/project_graph.rb
@@ -8,6 +8,6 @@ class ProjectGraph < Spinach::FeatureSteps | @@ -8,6 +8,6 @@ class ProjectGraph < Spinach::FeatureSteps | ||
8 | 8 | ||
9 | When 'I visit project "Shop" graph page' do | 9 | When 'I visit project "Shop" graph page' do |
10 | project = Project.find_by_name("Shop") | 10 | project = Project.find_by_name("Shop") |
11 | - visit project_stat_graph_path(project, "master") | 11 | + visit project_graph_path(project, "master") |
12 | end | 12 | end |
13 | end | 13 | end |
features/steps/project/project_network_graph.rb
@@ -12,7 +12,7 @@ class ProjectNetworkGraph < Spinach::FeatureSteps | @@ -12,7 +12,7 @@ class ProjectNetworkGraph < Spinach::FeatureSteps | ||
12 | Network::Graph.stub(max_count: 10) | 12 | Network::Graph.stub(max_count: 10) |
13 | 13 | ||
14 | project = Project.find_by_name("Shop") | 14 | project = Project.find_by_name("Shop") |
15 | - visit project_graph_path(project, "master") | 15 | + visit project_network_path(project, "master") |
16 | end | 16 | end |
17 | 17 | ||
18 | And 'page should select "master" in select box' do | 18 | And 'page should select "master" in select box' do |
features/steps/shared/paths.rb
@@ -149,7 +149,7 @@ module SharedPaths | @@ -149,7 +149,7 @@ module SharedPaths | ||
149 | # Stub Graph max_size to speed up test (10 commits vs. 650) | 149 | # Stub Graph max_size to speed up test (10 commits vs. 650) |
150 | Network::Graph.stub(max_count: 10) | 150 | Network::Graph.stub(max_count: 10) |
151 | 151 | ||
152 | - visit project_graph_path(@project, root_ref) | 152 | + visit project_network_path(@project, root_ref) |
153 | end | 153 | end |
154 | 154 | ||
155 | step "I visit my project's issues page" do | 155 | step "I visit my project's issues page" do |
spec/routing/project_routing_spec.rb
@@ -446,9 +446,15 @@ describe CompareController, "routing" do | @@ -446,9 +446,15 @@ describe CompareController, "routing" do | ||
446 | end | 446 | end |
447 | end | 447 | end |
448 | 448 | ||
449 | -describe GraphController, "routing" do | 449 | +describe NetworkController, "routing" do |
450 | it "to #show" do | 450 | it "to #show" do |
451 | - get("/gitlabhq/graph/master").should route_to('graph#show', project_id: 'gitlabhq', id: 'master') | ||
452 | - get("/gitlabhq/graph/master.json").should route_to('graph#show', project_id: 'gitlabhq', id: 'master', format: "json") | 451 | + get("/gitlabhq/network/master").should route_to('network#show', project_id: 'gitlabhq', id: 'master') |
452 | + get("/gitlabhq/network/master.json").should route_to('network#show', project_id: 'gitlabhq', id: 'master', format: "json") | ||
453 | + end | ||
454 | +end | ||
455 | + | ||
456 | +describe GraphsController, "routing" do | ||
457 | + it "to #show" do | ||
458 | + get("/gitlabhq/graphs/master").should route_to('graphs#show', project_id: 'gitlabhq', id: 'master') | ||
453 | end | 459 | end |
454 | end | 460 | end |