Refactor: Removing the duplicated code.

This commit is contained in:
Sato Hiroyuki 2013-03-07 20:36:40 +09:00
parent 79cd1ca304
commit b7e5f4556b
3 changed files with 38 additions and 46 deletions

View file

@ -26,5 +26,14 @@ module Network
0 0
end end
end end
def parents(map)
@commit.parents.map do |p|
if map.include?(p.id)
map[p.id]
end
end
.compact
end
end end
end end

View file

@ -2,7 +2,7 @@ require "grit"
module Network module Network
class Graph class Graph
attr_reader :days, :commits attr_reader :days, :commits, :map
def self.max_count def self.max_count
@max_count ||= 650 @max_count ||= 650
@ -61,9 +61,7 @@ module Network
end end
commits_sort_by_ref.each do |commit| commits_sort_by_ref.each do |commit|
if @map.include? commit.id then place_chain(commit)
place_chain(commit)
end
end end
# find parent spaces for not overlap lines # find parent spaces for not overlap lines
@ -115,25 +113,21 @@ module Network
def find_free_parent_spaces(commit) def find_free_parent_spaces(commit)
spaces = [] spaces = []
commit.parents.each do |p| commit.parents(@map).each do |parent|
if @map.include?(p.id) then range = if commit.time < parent.time then
parent = @map[p.id] commit.time..parent.time
else
parent.time..commit.time
end
range = if commit.time < parent.time then space = if commit.space >= parent.space then
commit.time..parent.time find_free_parent_space(range, parent.space, -1, commit.space)
else else
parent.time..commit.time find_free_parent_space(range, commit.space, -1, parent.space)
end end
space = if commit.space >= parent.space then mark_reserved(range, space)
find_free_parent_space(range, parent.space, -1, commit.space) spaces << space
else
find_free_parent_space(range, commit.space, -1, parent.space)
end
mark_reserved(range, space)
spaces << space
end
end end
spaces spaces
@ -175,25 +169,18 @@ module Network
leaves.each do |l| leaves.each do |l|
l.spaces << space l.spaces << space
# Also add space to parent # Also add space to parent
l.parents.each do |p| l.parents(@map).each do |parent|
if @map.include?(p.id) if parent.space > 0
parent = @map[p.id] parent.spaces << space
if parent.space > 0
parent.spaces << space
end
end end
end end
end end
# and mark it as reserved # and mark it as reserved
min_time = leaves.last.time min_time = leaves.last.time
parents = leaves.last.parents.collect leaves.last.parents(@map).each do |parent|
parents.each do |p| if parent.time < min_time
if @map.include? p.id min_time = parent.time
parent = @map[p.id]
if parent.time < min_time
min_time = parent.time
end
end end
end end
@ -206,7 +193,7 @@ module Network
# 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.zero?} parents = l.parents(@map).select{|p| p.space.zero?}
for p in parents for p in parents
place_chain(p, l.time) place_chain(p, l.time)
end end
@ -215,13 +202,10 @@ module Network
def get_space_base(leaves) def get_space_base(leaves)
space_base = 1 space_base = 1
if leaves.last.parents.size > 0 parents = leaves.last.parents(@map)
first_parent = leaves.last.parents.first if parents.size > 0
if @map.include?(first_parent.id) if parents.first.space > 0
first_p = @map[first_parent.id] space_base = parents.first.space
if first_p.space > 0
space_base = first_p.space
end
end end
end end
space_base space_base
@ -266,10 +250,9 @@ module Network
leaves.push(commit) if commit.space.zero? leaves.push(commit) if commit.space.zero?
while true while true
return leaves if commit.parents.count.zero? return leaves if commit.parents(@map).count.zero?
return leaves unless @map.include? commit.parents.first.id
commit = @map[commit.parents.first.id] commit = commit.parents(@map).first
return leaves unless commit.space.zero? return leaves unless commit.space.zero?

View file

@ -5,7 +5,7 @@
days: @graph.days.compact.map { |d| [d.day, d.strftime("%b")] }, days: @graph.days.compact.map { |d| [d.day, d.strftime("%b")] },
commits: @graph.commits.map do |c| commits: @graph.commits.map do |c|
{ {
parents: parents_zip_spaces(c.parents, c.parent_spaces), parents: parents_zip_spaces(c.parents(@graph.map), c.parent_spaces),
author: { author: {
name: c.author.name, name: c.author.name,
email: c.author.email, email: c.author.email,