Skip to content
Snippets Groups Projects
Commit 8c4e7ca5 authored by Jack Nagel's avatar Jack Nagel
Browse files

Parse raw diff output in `brew update`


Using each_cons() "works", but to report all changes correctly we need
to look at the last elements even after we've looked at the last 3
consecutive elements.

Instead, let's parse each line of the raw diff output using a regexp.

Signed-off-by: default avatarJack Nagel <jacknagel@gmail.com>
parent 1bc63136
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment