From 9076037a0df37f79d0556bac683cc3b1c9742fe6 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Thu, 22 Mar 2012 18:22:39 -0500 Subject: [PATCH] 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 --- Library/Homebrew/cmd/update.rb | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb index e3e25c01eb..594d2da959 100644 --- a/Library/Homebrew/cmd/update.rb +++ b/Library/Homebrew/cmd/update.rb @@ -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