diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 61d7608cb1..d07fea7598 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -546,14 +546,13 @@ class FormulaInstaller end def link - if f.linked_keg.directory? and f.linked_keg.resolved_path == f.prefix - opoo "This keg was marked linked already, continuing anyway" - # otherwise Keg.link will bail - f.linked_keg.unlink - end - keg = Keg.new(f.prefix) + if keg.linked? + opoo "This keg was marked linked already, continuing anyway" + keg.remove_linked_keg_record + end + begin keg.link rescue Keg::ConflictError => e diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index bc96f5356c..ffe34a80c5 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -180,16 +180,18 @@ class Keg end end - if linked? - linked_keg_record.unlink - linked_keg_record.parent.rmdir_if_possible - end + remove_linked_keg_record if linked? dirs.reverse_each(&:rmdir_if_possible) ObserverPathnameExtension.total end + def remove_linked_keg_record + linked_keg_record.unlink + linked_keg_record.parent.rmdir_if_possible + end + def lock FormulaLock.new(name).with_lock { yield } end