def changed_files(rev, rev_from=nil)
    out = execute "git diff-tree -r --no-commit-id #{rev_from} #{rev}"
    out.split("\n").collect do |l|
      cols = l.split
      path = cols[5]
      kind = case cols[4]
        when "M"
          :modified
        when "A"
          :added
        when "D"
          :deleted
        else
          nil
        end
      ChangedFile.new(path, kind)
    end
  end
def changed_files(rev, rev_from=nil)
    out = execute "git diff-tree -r --no-commit-id #{rev_from} #{rev}"
    out.split("\n").collect do |l|
      cols = l.split
      path = cols[5]
      kind = case cols[4]
        when "M"
          :modified
        when "A"
          :added
        when "D"
          :deleted
        else
          nil
        end
      ChangedFile.new(path, kind)
    end
  end
returns a list of all files which changed in commit +rev+
 together with the kind of the change (:modified, :deleted, :added)

 if +from_rev+ is given, lists changes between +from_rev and +rev+
 with one argument only, no changes will be returned for merge commits
 use the two argument variant for merge commits and decide for one parent