Commit 81cc1cb8 authored by Sato Hiroyuki's avatar Sato Hiroyuki

Enable to display the commit older than 650th commit.

parent 1e907498
...@@ -10,7 +10,7 @@ class GraphController < ProjectResourceController ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 = []
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment