From d3037f704482c3e024f9761cc8d07e286d4fed23 Mon Sep 17 00:00:00 2001 From: Vlad Shablinsky Date: Sun, 16 Aug 2015 17:16:44 +0300 Subject: [PATCH] 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. --- Library/Homebrew/cmd/uninstall.rb | 13 ------------- 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 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!