Improve network-graph

This commit is contained in:
Sato Hiroyuki 2012-12-12 20:23:49 +09:00
parent 743073ce5f
commit 5fd830f01c

View file

@ -98,7 +98,7 @@ module Gitlab
if leaves.empty? if leaves.empty?
return return
end end
space = find_free_space(leaves.last.time..leaves.first.time) space = find_free_space(leaves, map)
leaves.each{|l| l.space = space} leaves.each{|l| l.space = space}
# and mark it as reserved # and mark it as reserved
min_time = leaves.last.time min_time = leaves.last.time
@ -120,7 +120,7 @@ module Gitlab
# Visit branching chains # Visit branching chains
leaves.each do |l| leaves.each do |l|
parents = l.parents.collect.select{|p| map.include? p.id and map[p.id].space == 0} parents = l.parents.collect.select{|p| map.include? p.id and map[p.id].space.zero?}
for p in parents for p in parents
place_chain(map[p.id], map, l.time) place_chain(map[p.id], map, l.time)
end end
@ -133,18 +133,29 @@ module Gitlab
end end
end end
def find_free_space(time_range) def find_free_space(leaves, map)
time_range = leaves.last.time..leaves.first.time
reserved = [] reserved = []
for day in time_range for day in time_range
reserved += @_reserved[day] reserved += @_reserved[day]
end end
space = 1 space = base_space(leaves, map)
while reserved.include? space do while reserved.include? space do
space += 1 space += 1
end end
space space
end end
def base_space(leaves, map)
parents = []
leaves.each do |l|
parents.concat l.parents.collect.select{|p| map.include? p.id and map[p.id].space.nonzero?}
end
space = parents.map{|p| map[p.id].space}.max || 0
space += 1
end
# Takes most left subtree branch of commits # Takes most left subtree branch of commits
# which don't have space mark yet. # which don't have space mark yet.
# #
@ -157,13 +168,13 @@ module Gitlab
leaves.push(commit) if commit.space.zero? leaves.push(commit) if commit.space.zero?
while true while true
parent = commit.parents.collect.select do |p| return leaves if commit.parents.count.zero?
map.include? p.id and map[p.id].space == 0 return leaves unless map.include? commit.parents.first.id
end
return leaves if parent.count.zero? commit = map[commit.parents.first.id]
return leaves unless commit.space.zero?
commit = map[parent.first.id]
leaves.push(commit) leaves.push(commit)
end end
end end