Enable to display the commit older than 650th commit.
This commit is contained in:
parent
1e907498a9
commit
81cc1cb87b
2 changed files with 48 additions and 20 deletions
|
@ -10,7 +10,7 @@ class GraphController < ProjectResourceController
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
format.json do
|
format.json do
|
||||||
graph = Gitlab::Graph::JsonBuilder.new(project, @ref)
|
graph = Gitlab::Graph::JsonBuilder.new(project, @ref, @commit)
|
||||||
render :json => graph.to_json
|
render :json => graph.to_json
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,9 +9,10 @@ module Gitlab
|
||||||
@max_count ||= 650
|
@max_count ||= 650
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize project, ref
|
def initialize project, ref, commit
|
||||||
@project = project
|
@project = project
|
||||||
@ref = ref
|
@ref = ref
|
||||||
|
@commit = commit
|
||||||
@repo = project.repo
|
@repo = project.repo
|
||||||
@ref_cache = {}
|
@ref_cache = {}
|
||||||
|
|
||||||
|
@ -31,7 +32,8 @@ module Gitlab
|
||||||
# Get commits from repository
|
# Get commits from repository
|
||||||
#
|
#
|
||||||
def collect_commits
|
def collect_commits
|
||||||
@commits = Grit::Commit.find_all(repo, nil, {max_count: self.class.max_count}).dup
|
|
||||||
|
@commits = Grit::Commit.find_all(repo, nil, {max_count: self.class.max_count, skip: to_commit}).dup
|
||||||
|
|
||||||
# Decorate with app/models/commit.rb
|
# Decorate with app/models/commit.rb
|
||||||
@commits.map! { |commit| ::Commit.new(commit) }
|
@commits.map! { |commit| ::Commit.new(commit) }
|
||||||
|
@ -53,37 +55,24 @@ module Gitlab
|
||||||
#
|
#
|
||||||
# @return [Array<TimeDate>] list of commit dates corelated with time on commits
|
# @return [Array<TimeDate>] list of commit dates corelated with time on commits
|
||||||
def index_commits
|
def index_commits
|
||||||
days, heads, times = [], [], []
|
days, times = [], []
|
||||||
map = {}
|
map = {}
|
||||||
|
|
||||||
commits.reverse.each_with_index do |c,i|
|
commits.reverse.each_with_index do |c,i|
|
||||||
c.time = i
|
c.time = i
|
||||||
days[i] = c.committed_date
|
days[i] = c.committed_date
|
||||||
map[c.id] = c
|
map[c.id] = c
|
||||||
heads += c.refs unless c.refs.nil?
|
|
||||||
times[i] = c
|
times[i] = c
|
||||||
end
|
end
|
||||||
|
|
||||||
heads.select!{|h| h.is_a? Grit::Head or h.is_a? Grit::Remote}
|
|
||||||
# sort heads so the master is top and current branches are closer
|
|
||||||
heads.sort! do |a,b|
|
|
||||||
if a.name == @ref
|
|
||||||
-1
|
|
||||||
elsif b.name == @ref
|
|
||||||
1
|
|
||||||
else
|
|
||||||
b.commit.committed_date <=> a.commit.committed_date
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
@_reserved = {}
|
@_reserved = {}
|
||||||
days.each_index do |i|
|
days.each_index do |i|
|
||||||
@_reserved[i] = []
|
@_reserved[i] = []
|
||||||
end
|
end
|
||||||
|
|
||||||
heads.each do |h|
|
commits_sort_by_ref.each do |commit|
|
||||||
if map.include? h.commit.id then
|
if map.include? commit.id then
|
||||||
place_chain(map[h.commit.id], map)
|
place_chain(map[commit.id], map)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -95,6 +84,45 @@ module Gitlab
|
||||||
days
|
days
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Skip count that the target commit is displayed in center.
|
||||||
|
def to_commit
|
||||||
|
commits = Grit::Commit.find_all(repo, nil)
|
||||||
|
commit_index = commits.index do |c|
|
||||||
|
c.id == @commit.id
|
||||||
|
end
|
||||||
|
|
||||||
|
if commit_index && (self.class.max_count / 2 < commit_index) then
|
||||||
|
# get max index that commit is displayed in the center.
|
||||||
|
commit_index - self.class.max_count / 2
|
||||||
|
else
|
||||||
|
0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def commits_sort_by_ref
|
||||||
|
commits.sort do |a,b|
|
||||||
|
if include_ref?(a)
|
||||||
|
-1
|
||||||
|
elsif include_ref?(b)
|
||||||
|
1
|
||||||
|
else
|
||||||
|
b.committed_date <=> a.committed_date
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def include_ref?(commit)
|
||||||
|
heads = commit.refs.select do |ref|
|
||||||
|
ref.is_a?(Grit::Head) or ref.is_a?(Grit::Remote)
|
||||||
|
end
|
||||||
|
|
||||||
|
heads.map! do |head|
|
||||||
|
head.name
|
||||||
|
end
|
||||||
|
|
||||||
|
heads.include?(@ref)
|
||||||
|
end
|
||||||
|
|
||||||
def find_free_parent_spaces(commit, map, times)
|
def find_free_parent_spaces(commit, map, times)
|
||||||
spaces = []
|
spaces = []
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue