From 85eb73ced7316171a3e5087e601f3c182b8859ed Mon Sep 17 00:00:00 2001 From: Simon Sigurdhsson Date: Mon, 11 Mar 2013 16:41:08 +0100 Subject: brew-pin: prevent selected formulae from upgrade. * Added `pin` et. al. to manpage. * Added `brew pin` to `brew.1` * Added `brew unpin` to `brew.1` * Added `brew list --pinned` to `brew.1` * Added information about frozen formulae to `brew upgrade` in `brew.1` * Added `pin` et.al. to completion scripts. * Unpin formulae when uninstalling them * Unpin and re-pin formulae when upgrading (avoids stale symlink) References #18386. Closes #18515. Signed-off-by: Mike McQuaid --- Library/Homebrew/cmd/upgrade.rb | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'Library/Homebrew/cmd/upgrade.rb') diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index b5effee50..af2e4a0e1 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -18,8 +18,10 @@ module Homebrew extend self if ARGV.named.empty? require 'cmd/outdated' + upgrade_pinned = false outdated = Homebrew.outdated_brews else + upgrade_pinned = true outdated = ARGV.formulae.select do |f| if f.installed? onoe "#{f}-#{f.installed_version} already installed" @@ -32,10 +34,19 @@ module Homebrew extend self exit 1 if outdated.empty? end - if outdated.length > 1 + unless upgrade_pinned + pinned = outdated.select { |f| f.pinned? } + outdated -= pinned + end + + if outdated.length > 0 oh1 "Upgrading #{outdated.length} outdated package#{outdated.length.plural_s}, with result:" puts outdated.map{ |f| "#{f.name} #{f.version}" } * ", " end + if not upgrade_pinned and pinned.length > 0 + oh1 "Not upgrading #{pinned.length} pinned package#{outdated.length.plural_s}:" + puts pinned.map{ |f| "#{f.name} #{f.version}" } * ", " + end outdated.each do |f| upgrade_formula f @@ -60,6 +71,13 @@ module Homebrew extend self installer.install installer.caveats installer.finish + + # If the formula was pinned, and we were force-upgrading it, unpin and + # pin it again to get a symlink pointing to the correct keg. + if f.pinned? + f.unpin + f.pin + end rescue FormulaInstallationAlreadyAttemptedError # We already attempted to upgrade f as part of the dependency tree of # another formula. In that case, don't generate an error, just move on. -- cgit v1.2.3