aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd/upgrade.rb
diff options
context:
space:
mode:
authorSimon Sigurdhsson2013-03-11 16:41:08 +0100
committerMike McQuaid2013-03-30 19:50:47 +0000
commit85eb73ced7316171a3e5087e601f3c182b8859ed (patch)
treed48851b6277651af254f603198b0f38270745cff /Library/Homebrew/cmd/upgrade.rb
parentee7224c8ecb8e6d58b3bc40aee962d81035bf3b9 (diff)
downloadhomebrew-85eb73ced7316171a3e5087e601f3c182b8859ed.tar.bz2
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 <mike@mikemcquaid.com>
Diffstat (limited to 'Library/Homebrew/cmd/upgrade.rb')
-rw-r--r--Library/Homebrew/cmd/upgrade.rb20
1 files changed, 19 insertions, 1 deletions
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.