From 8aa18510c492c0167978df4e209455af4ff215e3 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Sat, 17 Sep 2016 13:25:32 +0100 Subject: [PATCH] Always run LinkedKegs migration (if needed). Ensure that `brew update` always runs the LinkedKegs migration if needed as it may not have been run by `brew update` if it was using `--preinstall` or a `git pull` etc. Also, if the old paths still exist: just use them instead. Finally, always try to unlink/unpin before link/pin. Fixes https://github.com/Homebrew/homebrew-core/issues/4918. --- Library/Homebrew/cmd/update-report.rb | 10 ++++++++-- Library/Homebrew/cmd/update.sh | 1 + Library/Homebrew/config.rb | 14 +++++++++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index fa82c875d4..653757a2e1 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -172,7 +172,11 @@ module Homebrew legacy_linked_kegs = HOMEBREW_LIBRARY/"LinkedKegs" return unless legacy_linked_kegs.directory? - legacy_linked_kegs.children.each {|f| Keg.new(f.realpath).link } + legacy_linked_kegs.children.each do |f| + keg = Keg.new(f.realpath) + keg.unlink + keg.link + end FileUtils.rm_rf legacy_linked_kegs legacy_pinned_kegs = HOMEBREW_LIBRARY/"PinnedKegs" @@ -181,7 +185,9 @@ module Homebrew legacy_pinned_kegs.children.each do |f| pin_version = Keg.new(f.realpath).version formula = Formulary.factory(f.basename.to_s) - FormulaPin.new(formula).pin_at(pin_version) + pin = FormulaPin.new(formula) + pin.unpin + pin.pin_at(pin_version) end FileUtils.rm_rf legacy_pinned_kegs end diff --git a/Library/Homebrew/cmd/update.sh b/Library/Homebrew/cmd/update.sh index ee6048ca8c..67b3699ed2 100644 --- a/Library/Homebrew/cmd/update.sh +++ b/Library/Homebrew/cmd/update.sh @@ -534,6 +534,7 @@ EOS if [[ -n "$HOMEBREW_UPDATED" || -n "$HOMEBREW_UPDATE_FAILED" || -n "$HOMEBREW_UPDATE_FORCE" || + -d "$HOMEBREW_LIBRARY/LinkedKegs" || (-n "$HOMEBREW_DEVELOPER" && -z "$HOMEBREW_UPDATE_PREINSTALL") ]] then brew update-report "$@" diff --git a/Library/Homebrew/config.rb b/Library/Homebrew/config.rb index 19ad7a7e54..31ac2d4350 100644 --- a/Library/Homebrew/config.rb +++ b/Library/Homebrew/config.rb @@ -18,10 +18,18 @@ HOMEBREW_LIBRARY = Pathname.new(ENV["HOMEBREW_LIBRARY"]) HOMEBREW_SHIMS_PATH = HOMEBREW_LIBRARY/"Homebrew/shims" # Where we store symlinks to currently linked kegs -HOMEBREW_LINKED_KEGS = HOMEBREW_PREFIX/"var/homebrew/linked" +HOMEBREW_LINKED_KEGS = if (HOMEBREW_LIBRARY/"LinkedKegs").exist? + HOMEBREW_LIBRARY/"LinkedKegs" +else + HOMEBREW_PREFIX/"var/homebrew/linked" +end -# Wehere we store symlinks to currently version-pinned kegs -HOMEBREW_PINNED_KEGS = HOMEBREW_PREFIX/"var/homebrew/pinned" +# Where we store symlinks to currently version-pinned kegs +HOMEBREW_PINNED_KEGS = if (HOMEBREW_LIBRARY/"PinnedKegs").exist? + HOMEBREW_LIBRARY/"PinnedKegs" +else + HOMEBREW_PREFIX/"var/homebrew/pinned" +end # Where we store lock files HOMEBREW_LOCK_DIR = HOMEBREW_PREFIX/"var/homebrew/locks"