diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb index aa4c0d9195..875c3ced70 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 85b1305171..007d7bcfab 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!