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: Jack Nagel <jacknagel@gmail.com>
This commit is contained in:
parent
1bc6313694
commit
8c4e7ca5b5
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user