diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb index 594d2da959..26edaf2042 100644 --- a/Library/Homebrew/cmd/update.rb +++ b/Library/Homebrew/cmd/update.rb @@ -80,19 +80,21 @@ class Updater @current_revision = read_current_revision end + # Matches raw git diff format (see `man git-diff-tree`) + DIFFTREE_RX = /^:[0-7]{6} [0-7]{6} [0-9a-fA-F]{40} [0-9a-fA-F]{40} ([ACDMR])\d{0,3}\t(.+?)(?:\t(.+))?$/ + def report map = Hash.new{ |h,k| h[k] = [] } if initial_revision && initial_revision != current_revision - changes = `git diff-tree -r --name-status -M85% -z #{initial_revision} #{current_revision}`.split("\0") - changes.each_cons(3) do |status, src, dst| - next unless status =~ /^[AMDR](\d{3})?$/ - path = case status = status[0,1] - when 'R' then dst - else src + `git diff-tree -r --raw -M85% #{initial_revision} #{current_revision}`.each_line do |line| + DIFFTREE_RX.match line + path = case status = $1.to_sym + when :R then $3 + else $2 end path = Pathname.pwd.join(path).relative_path_from(HOMEBREW_REPOSITORY) - map[status.to_sym] << path.to_s + map[status] << path.to_s end end