Commit 81cc1cb87b2056b11640c9887bd40674c9d7925e
1 parent
1e907498
Exists in
master
and in
4 other branches
Enable to display the commit older than 650th commit.
Showing
2 changed files
with
48 additions
and
20 deletions
Show diff stats
app/controllers/graph_controller.rb
| ... | ... | @@ -10,7 +10,7 @@ class GraphController < ProjectResourceController |
| 10 | 10 | respond_to do |format| |
| 11 | 11 | format.html |
| 12 | 12 | format.json do |
| 13 | - graph = Gitlab::Graph::JsonBuilder.new(project, @ref) | |
| 13 | + graph = Gitlab::Graph::JsonBuilder.new(project, @ref, @commit) | |
| 14 | 14 | render :json => graph.to_json |
| 15 | 15 | end |
| 16 | 16 | end | ... | ... |
lib/gitlab/graph/json_builder.rb
| ... | ... | @@ -9,9 +9,10 @@ module Gitlab |
| 9 | 9 | @max_count ||= 650 |
| 10 | 10 | end |
| 11 | 11 | |
| 12 | - def initialize project, ref | |
| 12 | + def initialize project, ref, commit | |
| 13 | 13 | @project = project |
| 14 | 14 | @ref = ref |
| 15 | + @commit = commit | |
| 15 | 16 | @repo = project.repo |
| 16 | 17 | @ref_cache = {} |
| 17 | 18 | |
| ... | ... | @@ -31,7 +32,8 @@ module Gitlab |
| 31 | 32 | # Get commits from repository |
| 32 | 33 | # |
| 33 | 34 | def collect_commits |
| 34 | - @commits = Grit::Commit.find_all(repo, nil, {max_count: self.class.max_count}).dup | |
| 35 | + | |
| 36 | + @commits = Grit::Commit.find_all(repo, nil, {max_count: self.class.max_count, skip: to_commit}).dup | |
| 35 | 37 | |
| 36 | 38 | # Decorate with app/models/commit.rb |
| 37 | 39 | @commits.map! { |commit| ::Commit.new(commit) } |
| ... | ... | @@ -53,37 +55,24 @@ module Gitlab |
| 53 | 55 | # |
| 54 | 56 | # @return [Array<TimeDate>] list of commit dates corelated with time on commits |
| 55 | 57 | def index_commits |
| 56 | - days, heads, times = [], [], [] | |
| 58 | + days, times = [], [] | |
| 57 | 59 | map = {} |
| 58 | 60 | |
| 59 | 61 | commits.reverse.each_with_index do |c,i| |
| 60 | 62 | c.time = i |
| 61 | 63 | days[i] = c.committed_date |
| 62 | 64 | map[c.id] = c |
| 63 | - heads += c.refs unless c.refs.nil? | |
| 64 | 65 | times[i] = c |
| 65 | 66 | end |
| 66 | 67 | |
| 67 | - heads.select!{|h| h.is_a? Grit::Head or h.is_a? Grit::Remote} | |
| 68 | - # sort heads so the master is top and current branches are closer | |
| 69 | - heads.sort! do |a,b| | |
| 70 | - if a.name == @ref | |
| 71 | - -1 | |
| 72 | - elsif b.name == @ref | |
| 73 | - 1 | |
| 74 | - else | |
| 75 | - b.commit.committed_date <=> a.commit.committed_date | |
| 76 | - end | |
| 77 | - end | |
| 78 | - | |
| 79 | 68 | @_reserved = {} |
| 80 | 69 | days.each_index do |i| |
| 81 | 70 | @_reserved[i] = [] |
| 82 | 71 | end |
| 83 | 72 | |
| 84 | - heads.each do |h| | |
| 85 | - if map.include? h.commit.id then | |
| 86 | - place_chain(map[h.commit.id], map) | |
| 73 | + commits_sort_by_ref.each do |commit| | |
| 74 | + if map.include? commit.id then | |
| 75 | + place_chain(map[commit.id], map) | |
| 87 | 76 | end |
| 88 | 77 | end |
| 89 | 78 | |
| ... | ... | @@ -95,6 +84,45 @@ module Gitlab |
| 95 | 84 | days |
| 96 | 85 | end |
| 97 | 86 | |
| 87 | + # Skip count that the target commit is displayed in center. | |
| 88 | + def to_commit | |
| 89 | + commits = Grit::Commit.find_all(repo, nil) | |
| 90 | + commit_index = commits.index do |c| | |
| 91 | + c.id == @commit.id | |
| 92 | + end | |
| 93 | + | |
| 94 | + if commit_index && (self.class.max_count / 2 < commit_index) then | |
| 95 | + # get max index that commit is displayed in the center. | |
| 96 | + commit_index - self.class.max_count / 2 | |
| 97 | + else | |
| 98 | + 0 | |
| 99 | + end | |
| 100 | + end | |
| 101 | + | |
| 102 | + def commits_sort_by_ref | |
| 103 | + commits.sort do |a,b| | |
| 104 | + if include_ref?(a) | |
| 105 | + -1 | |
| 106 | + elsif include_ref?(b) | |
| 107 | + 1 | |
| 108 | + else | |
| 109 | + b.committed_date <=> a.committed_date | |
| 110 | + end | |
| 111 | + end | |
| 112 | + end | |
| 113 | + | |
| 114 | + def include_ref?(commit) | |
| 115 | + heads = commit.refs.select do |ref| | |
| 116 | + ref.is_a?(Grit::Head) or ref.is_a?(Grit::Remote) | |
| 117 | + end | |
| 118 | + | |
| 119 | + heads.map! do |head| | |
| 120 | + head.name | |
| 121 | + end | |
| 122 | + | |
| 123 | + heads.include?(@ref) | |
| 124 | + end | |
| 125 | + | |
| 98 | 126 | def find_free_parent_spaces(commit, map, times) |
| 99 | 127 | spaces = [] |
| 100 | 128 | ... | ... |