quick_diff

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