aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorVlad Shablinsky2015-08-16 17:16:44 +0300
committerXu Cheng2015-08-17 01:53:58 +0800
commitd3037f704482c3e024f9761cc8d07e286d4fed23 (patch)
treeac0b7bf1a8acfa1a1213a1584150fbc1a1c540fa /Library
parent9025719968d8105a186f998b75c5af802ae0d3c6 (diff)
downloadbrew-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.rb13
-rw-r--r--Library/Homebrew/keg.rb22
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!