aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/cmd/update.rb16
1 files changed, 9 insertions, 7 deletions
diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb
index 594d2da95..26edaf204 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