Skip to content

Commit

Permalink
Merge pull request #3748 from MikeMcQuaid/pin-more-robust
Browse files Browse the repository at this point in the history
Make pinning more robust
  • Loading branch information
MikeMcQuaid committed Feb 5, 2018
2 parents 62f85cf + 3a2e6b8 commit af8f8f1
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 23 deletions.
3 changes: 1 addition & 2 deletions Library/Homebrew/cmd/pin.rb
@@ -1,7 +1,6 @@
#: * `pin` <formulae>:
#: Pin the specified <formulae>, preventing them from being upgraded when
#: issuing the `brew upgrade <formulae>` command (but can still be upgraded
#: as dependencies for other formulae). See also `unpin`.
#: issuing the `brew upgrade <formulae>` command. See also `unpin`.

require "formula"

Expand Down
10 changes: 10 additions & 0 deletions Library/Homebrew/cmd/uninstall.rb
Expand Up @@ -46,6 +46,16 @@ def uninstall
rm_pin rack
else
kegs.each do |keg|
begin
f = Formulary.from_rack(rack)
if f.pinned?
onoe "#{f.full_name} is pinned. You must unpin it to uninstall."
next
end
rescue
nil
end

keg.lock do
puts "Uninstalling #{keg}... (#{keg.abv})"
keg.unlink
Expand Down
22 changes: 4 additions & 18 deletions Library/Homebrew/cmd/upgrade.rb
Expand Up @@ -50,11 +50,8 @@ def upgrade
exit 1 if outdated.empty?
end

unless upgrade_pinned?
pinned = outdated.select(&:pinned?)
outdated -= pinned
end

pinned = outdated.select(&:pinned?)
outdated -= pinned
formulae_to_install = outdated.map(&:latest_formula)

if formulae_to_install.empty?
Expand All @@ -64,8 +61,8 @@ def upgrade
puts formulae_to_install.map { |f| "#{f.full_specified_name} #{f.pkg_version}" } * ", "
end

unless upgrade_pinned? || pinned.empty?
oh1 "Not upgrading #{Formatter.pluralize(pinned.length, "pinned package")}:"
unless pinned.empty?
onoe "Not upgrading #{Formatter.pluralize(pinned.length, "pinned package")}:"
puts pinned.map { |f| "#{f.full_specified_name} #{f.pkg_version}" } * ", "
end

Expand Down Expand Up @@ -95,10 +92,6 @@ def upgrade
end
end

def upgrade_pinned?
!ARGV.named.empty?
end

def upgrade_formula(f)
if f.opt_prefix.directory?
keg = Keg.new(f.opt_prefix.resolved_path)
Expand Down Expand Up @@ -143,13 +136,6 @@ def upgrade_formula(f)

fi.install
fi.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.
Expand Down
3 changes: 1 addition & 2 deletions docs/Manpage.md
Expand Up @@ -371,8 +371,7 @@ With `--verbose` or `-v`, many commands print extra debugging information. Note

* `pin` `formulae`:
Pin the specified `formulae`, preventing them from being upgraded when
issuing the `brew upgrade `formulae command (but can still be upgraded
as dependencies for other formulae). See also `unpin`.
issuing the `brew upgrade `formulae command. See also `unpin`.

* `postinstall` `formula`:
Rerun the post-install steps for `formula`.
Expand Down
2 changes: 1 addition & 1 deletion manpages/brew.1
Expand Up @@ -384,7 +384,7 @@ If \fB\-\-fetch\-HEAD\fR is passed, fetch the upstream repository to detect if t
.
.TP
\fBpin\fR \fIformulae\fR
Pin the specified \fIformulae\fR, preventing them from being upgraded when issuing the \fBbrew upgrade <formulae>\fR command (but can still be upgraded as dependencies for other formulae)\. See also \fBunpin\fR\.
Pin the specified \fIformulae\fR, preventing them from being upgraded when issuing the \fBbrew upgrade <formulae>\fR command\. See also \fBunpin\fR\.
.
.TP
\fBpostinstall\fR \fIformula\fR
Expand Down

0 comments on commit af8f8f1

Please sign in to comment.