in lib/grit/git-ruby/repository.rb [498:540]
def quick_diff(tree1, tree2, path = '.', recurse = true)
return changed if tree1 == tree2
t1 = list_tree(tree1) if tree1
t2 = list_tree(tree2) if tree2
changed = quick_what_changed(t1, t2, path, 'blob') +
quick_what_changed(t1, t2, path, 'link')
t1['tree'].each do |dir, hsh|
t2_tree = t2['tree'][dir] rescue nil
full = File.join(path, dir)
if !t2_tree
if recurse
changed += quick_diff(hsh[:sha], nil, full, true)
else
changed << [full, 'added', hsh[:sha], nil]
end
elsif (hsh[:sha] != t2_tree[:sha])
if recurse
changed += quick_diff(hsh[:sha], t2_tree[:sha], full, true)
else
changed << [full, 'modified', hsh[:sha], t2_tree[:sha]]
end
end
end if t1
t2['tree'].each do |dir, hsh|
t1_tree = t1['tree'][dir] rescue nil
full = File.join(path, dir)
if !t1_tree
if recurse
changed += quick_diff(nil, hsh[:sha], full, true)
else
changed << [full, 'removed', nil, hsh[:sha]]
end
end
end if t2
changed
end