aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorJack Nagel2012-03-22 18:22:39 -0500
committerJack Nagel2012-03-22 22:15:57 -0500
commit40599c3ed5a5c5fd3f9d03d12c456792d9e34937 (patch)
treec3a9cd19eb3932809cdd95894cd3e484e8cd0542 /Library
parenta58497368b3a6b73fc8f6d6d0c51c19b5fe7df51 (diff)
downloadhomebrew-40599c3ed5a5c5fd3f9d03d12c456792d9e34937.tar.bz2
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>
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/cmd/update.rb13
1 files changed, 9 insertions, 4 deletions
diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb
index e3e25c01e..594d2da95 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