diff options
| author | Simon Sigurdhsson | 2013-03-11 16:41:08 +0100 | 
|---|---|---|
| committer | Mike McQuaid | 2013-03-30 19:50:47 +0000 | 
| commit | 85eb73ced7316171a3e5087e601f3c182b8859ed (patch) | |
| tree | d48851b6277651af254f603198b0f38270745cff /Library/Homebrew/cmd/upgrade.rb | |
| parent | ee7224c8ecb8e6d58b3bc40aee962d81035bf3b9 (diff) | |
| download | homebrew-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.rb | 20 | 
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. | 
