Permalink
Browse files

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 #11158.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
  • Loading branch information...
1 parent d931dc3 commit 47b7f945a18adf3938ddf2c4aee6e030c1f1c7f6 @jacknagel jacknagel committed with Mar 22, 2012
Showing with 9 additions and 4 deletions.
  1. +9 −4 Library/Homebrew/cmd/update.rb
@@ -84,10 +84,15 @@ def report
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

0 comments on commit 47b7f94

Please sign in to comment.