Detect and display renames in brew update
Renamed formulae will cease to display as an add/delete pair and instead end up the in the "Renamed" section. In the future we should be able to take this information and use it to rename existing kegs during updates, allowing us to rename formulae without breaking upgrades. Renaming a formula requires renaming the class, so there will be at least one add/delete pair in the file. Thus, the similarity threshold for detecting renames is set at 85% to allow a little bit of content turnover without losing track of the rename. Closes Homebrew/homebrew#11158. Signed-off-by: Jack Nagel <jacknagel@gmail.com>
This commit is contained in:
parent
10f8443f8a
commit
9076037a0d
@ -84,10 +84,15 @@ class Updater
|
||||
map = Hash.new{ |h,k| h[k] = [] }
|
||||
|
||||
if initial_revision && initial_revision != current_revision
|
||||
changes = `git diff-tree -r --name-status -z #{initial_revision} #{current_revision}`.split("\0")
|
||||
changes.each_slice(2) do |status, file|
|
||||
file = Pathname.pwd.join(file).relative_path_from(HOMEBREW_REPOSITORY)
|
||||
map[status.to_sym] << file.to_s
|
||||
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
|
||||
end
|
||||
path = Pathname.pwd.join(path).relative_path_from(HOMEBREW_REPOSITORY)
|
||||
map[status.to_sym] << path.to_s
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user