Commit 038d40f0f5b202fe9ed133fdf9de1774bdbc8ede

Authored by Dmitriy Zaporozhets
1 parent 9e2c8d94

Solve inconsistency between network graph & stat graphs

app/controllers/graph_controller.rb
... ... @@ -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
app/controllers/graphs_controller.rb 0 → 100644
... ... @@ -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
... ...
app/controllers/network_controller.rb 0 → 100644
... ... @@ -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 &lt; ProjectResourceController
14 14 elsif params[:destination] == "blob"
15 15 project_blob_path(@project, (@id))
16 16 elsif params[:destination] == "graph"
17   - project_graph_path(@project, @id, @options)
  17 + project_network_path(@project, @id, @options)
18 18 else
19 19 project_commits_path(@project, @id)
20 20 end
... ...
app/controllers/stat_graph_controller.rb
... ... @@ -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   -%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   -= 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   -<% 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/graphs/show.html.haml 0 → 100644
... ... @@ -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 + });
... ...
app/views/graphs/show.js.haml 0 → 100644
... ... @@ -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 9 = link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref)
10 10 = nav_link(controller: %w(commit commits compare repositories protected_branches)) do
11 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 17 - if @project.issues_enabled
18 18 = nav_link(controller: %w(issues milestones labels)) do
... ...
app/views/network/_head.html.haml 0 → 100644
... ... @@ -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 +
... ...
app/views/network/show.html.haml 0 → 100644
... ... @@ -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 + });
... ...
app/views/network/show.json.erb 0 → 100644
... ... @@ -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   -.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   -: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 190 resources :commits, only: [:show], constraints: {id: /(?:[^.]|\.(?!atom$))+/, format: /atom/}
191 191 resources :compare, only: [:index, :create]
192 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 195 match "/compare/:from...:to" => "compare#show", as: "compare", via: [:get, :post], constraints: {from: /.+/, to: /.+/}
196 196  
197 197 scope module: :projects do
... ...
features/steps/project/project_graph.rb
... ... @@ -8,6 +8,6 @@ class ProjectGraph &lt; Spinach::FeatureSteps
8 8  
9 9 When 'I visit project "Shop" graph page' do
10 10 project = Project.find_by_name("Shop")
11   - visit project_stat_graph_path(project, "master")
  11 + visit project_graph_path(project, "master")
12 12 end
13 13 end
... ...
features/steps/project/project_network_graph.rb
... ... @@ -12,7 +12,7 @@ class ProjectNetworkGraph &lt; Spinach::FeatureSteps
12 12 Network::Graph.stub(max_count: 10)
13 13  
14 14 project = Project.find_by_name("Shop")
15   - visit project_graph_path(project, "master")
  15 + visit project_network_path(project, "master")
16 16 end
17 17  
18 18 And 'page should select "master" in select box' do
... ...
features/steps/shared/paths.rb
... ... @@ -149,7 +149,7 @@ module SharedPaths
149 149 # Stub Graph max_size to speed up test (10 commits vs. 650)
150 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 153 end
154 154  
155 155 step "I visit my project's issues page" do
... ...
spec/routing/project_routing_spec.rb
... ... @@ -446,9 +446,15 @@ describe CompareController, &quot;routing&quot; do
446 446 end
447 447 end
448 448  
449   -describe GraphController, "routing" do
  449 +describe NetworkController, "routing" do
450 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 459 end
454 460 end
... ...