diff options
| author | Vlad Shablinsky | 2015-08-16 17:16:44 +0300 |
|---|---|---|
| committer | Xu Cheng | 2015-08-17 01:53:58 +0800 |
| commit | d3037f704482c3e024f9761cc8d07e286d4fed23 (patch) | |
| tree | ac0b7bf1a8acfa1a1213a1584150fbc1a1c540fa /Library | |
| parent | 9025719968d8105a186f998b75c5af802ae0d3c6 (diff) | |
| download | brew-d3037f704482c3e024f9761cc8d07e286d4fed23.tar.bz2 | |
update opt for renamed formula
After the formula gets renamed oldname opt is created and
it points to the linked keg. However if we then upgrade newname
oldname opt still points to the same keg it pointed before upgrade.
The commit fixes this behaviour thus that oldname opt links at the
same keg opt point.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/cmd/uninstall.rb | 13 | ||||
| -rw-r--r-- | Library/Homebrew/keg.rb | 22 |
2 files changed, 22 insertions, 13 deletions
diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb index aa4c0d919..875c3ced7 100644 --- a/Library/Homebrew/cmd/uninstall.rb +++ b/Library/Homebrew/cmd/uninstall.rb @@ -18,15 +18,9 @@ module Homebrew # Remove every symlink that links to keg, because it can # be left by migrator links.each do |link| - old_opt = HOMEBREW_PREFIX/"opt/#{link.basename}" if link.exist? && link.realpath == keg.rack.realpath old_cellars << link end - - if old_opt.symlink? && old_opt.realpath.to_s == keg.to_s - old_opt.unlink - old_opt.parent.rmdir_if_possible - end end keg.unlink @@ -52,13 +46,6 @@ module Homebrew name = rack.basename links.each do |link| - old_opt = HOMEBREW_PREFIX/"opt/#{link.basename}" - if old_opt.symlink? && old_opt.exist? \ - && old_opt.realpath.parent == rack.realpath - old_opt.unlink - old_opt.parent.rmdir_if_possible - end - link.unlink if link.exist? && link.realpath == rack.realpath end diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index 85b130517..007d7bcfa 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -183,6 +183,7 @@ class Keg path.rmtree path.parent.rmdir_if_possible remove_opt_record if optlinked? + remove_oldname_opt_record end def unlink @@ -256,6 +257,14 @@ class Keg path.find(*args, &block) end + def oldname_opt_record + @oldname_opt_record ||= if (opt_dir = HOMEBREW_PREFIX/"opt").directory? + opt_dir.subdirs.detect do |dir| + dir.symlink? && dir != opt_record && path.parent == dir.resolved_path.parent + end + end + end + def link(mode = OpenStruct.new) raise AlreadyLinkedError.new(self) if linked_keg_record.directory? @@ -330,9 +339,22 @@ class Keg ObserverPathnameExtension.total end + def remove_oldname_opt_record + return unless oldname_opt_record + return unless oldname_opt_record.resolved_path == path + @oldname_opt_record.unlink + @oldname_opt_record.parent.rmdir_if_possible + @oldname_opt_record = nil + end + def optlink(mode = OpenStruct.new) opt_record.delete if opt_record.symlink? || opt_record.exist? make_relative_symlink(opt_record, path, mode) + + if oldname_opt_record + oldname_opt_record.delete + make_relative_symlink(oldname_opt_record, path, mode) + end end def delete_pyc_files! |
