Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSato Hiroyuki <sathiroyuki@gmail.com>2013-02-05 07:42:30 +0400
committerSato Hiroyuki <sathiroyuki@gmail.com>2013-02-05 07:42:30 +0400
commit81cc1cb87b2056b11640c9887bd40674c9d7925e (patch)
tree2a97b17c4f92a172ff71d63990d39b0c12fd28f9 /lib
parent1e907498a944c22db79e9cfbd26ee7f10fe1a091 (diff)
Enable to display the commit older than 650th commit.
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/graph/json_builder.rb66
1 files changed, 47 insertions, 19 deletions
diff --git a/lib/gitlab/graph/json_builder.rb b/lib/gitlab/graph/json_builder.rb
index fc58d7f2dcf..05e16f3d683 100644
--- a/lib/gitlab/graph/json_builder.rb
+++ b/lib/gitlab/graph/json_builder.rb
@@ -9,9 +9,10 @@ module Gitlab
@max_count ||= 650
end
- def initialize project, ref
+ def initialize project, ref, commit
@project = project
@ref = ref
+ @commit = commit
@repo = project.repo
@ref_cache = {}
@@ -31,7 +32,8 @@ module Gitlab
# Get commits from repository
#
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
@commits.map! { |commit| ::Commit.new(commit) }
@@ -53,37 +55,24 @@ module Gitlab
#
# @return [Array<TimeDate>] list of commit dates corelated with time on commits
def index_commits
- days, heads, times = [], [], []
+ days, times = [], []
map = {}
commits.reverse.each_with_index do |c,i|
c.time = i
days[i] = c.committed_date
map[c.id] = c
- heads += c.refs unless c.refs.nil?
times[i] = c
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 = {}
days.each_index do |i|
@_reserved[i] = []
end
- heads.each do |h|
- if map.include? h.commit.id then
- place_chain(map[h.commit.id], map)
+ commits_sort_by_ref.each do |commit|
+ if map.include? commit.id then
+ place_chain(map[commit.id], map)
end
end
@@ -95,6 +84,45 @@ module Gitlab
days
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)
spaces = []