aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/formula_installer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/formula_installer.rb')
-rw-r--r--Library/Homebrew/formula_installer.rb63
1 files changed, 34 insertions, 29 deletions
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb
index 56238ad73..42abe5171 100644
--- a/Library/Homebrew/formula_installer.rb
+++ b/Library/Homebrew/formula_installer.rb
@@ -58,13 +58,14 @@ class FormulaInstaller
@options = Options.new
@invalid_option_names = []
@requirement_messages = []
-
- @@attempted ||= Set.new
-
@poured_bottle = false
@pour_failed = false
end
+ def self.attempted
+ @attempted ||= Set.new
+ end
+
# When no build tools are available and build flags are passed through ARGV,
# it's necessary to interrupt the user before any sort of installation
# can proceed. Only invoked when the user has no developer tools.
@@ -92,7 +93,7 @@ class FormulaInstaller
return false if formula.bottle_disabled?
unless formula.pour_bottle?
if install_bottle_options[:warn] && formula.pour_bottle_check_unsatisfied_reason
- opoo <<-EOS.undent
+ opoo <<~EOS
Building #{formula.full_name} from source:
#{formula.pour_bottle_check_unsatisfied_reason}
EOS
@@ -103,7 +104,7 @@ class FormulaInstaller
bottle = formula.bottle_specification
unless bottle.compatible_cellar?
if install_bottle_options[:warn]
- opoo <<-EOS.undent
+ opoo <<~EOS
Building #{formula.full_name} from source:
The bottle needs a #{bottle.cellar} Cellar (yours is #{HOMEBREW_CELLAR}).
EOS
@@ -145,7 +146,7 @@ class FormulaInstaller
end
def check_install_sanity
- raise FormulaInstallationAlreadyAttemptedError, formula if @@attempted.include?(formula)
+ raise FormulaInstallationAlreadyAttemptedError, formula if self.class.attempted.include?(formula)
return if ignore_deps?
@@ -164,14 +165,14 @@ class FormulaInstaller
end
unless recursive_dependencies.empty?
- raise CannotInstallFormulaError, <<-EOS.undent
+ raise CannotInstallFormulaError, <<~EOS
#{formula.full_name} contains a recursive dependency on itself:
#{recursive_dependencies.join("\n ")}
EOS
end
if recursive_formulae.flat_map(&:recursive_dependencies).map(&:to_s).include?(formula.name)
- raise CannotInstallFormulaError, <<-EOS.undent
+ raise CannotInstallFormulaError, <<~EOS
#{formula.full_name} contains a recursive dependency on itself!
EOS
end
@@ -187,7 +188,7 @@ class FormulaInstaller
version_conflicts += version_hash[unversioned_name]
end
unless version_conflicts.empty?
- raise CannotInstallFormulaError, <<-EOS.undent
+ raise CannotInstallFormulaError, <<~EOS
#{formula.full_name} contains conflicting version recursive dependencies:
#{version_conflicts.to_a.join ", "}
View these with `brew deps --tree #{formula.full_name}`.
@@ -220,16 +221,16 @@ class FormulaInstaller
# function but after instantiating this class so that it can avoid having to
# relink the active keg if possible (because it is slow).
if formula.linked_keg.directory?
- message = <<-EOS.undent
+ message = <<~EOS
#{formula.name} #{formula.linked_version} is already installed
EOS
message += if formula.outdated? && !formula.head?
- <<-EOS.undent
+ <<~EOS
To upgrade to #{formula.pkg_version}, run `brew upgrade #{formula.name}`
EOS
else
# some other version is already installed *and* linked
- <<-EOS.undent
+ <<~EOS
To install #{formula.pkg_version}, first run `brew unlink #{formula.name}`
EOS
end
@@ -287,12 +288,12 @@ class FormulaInstaller
end
end
- @@attempted << formula
+ self.class.attempted << formula
if pour_bottle?(warn: true)
begin
pour
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
# any exceptions must leave us with nothing installed
ignore_interrupts do
formula.prefix.rmtree if formula.prefix.directory?
@@ -354,7 +355,7 @@ class FormulaInstaller
rescue FormulaUnavailableError => e
# If the formula name doesn't exist any more then complain but don't
# stop installation from continuing.
- opoo <<-EOS.undent
+ opoo <<~EOS
#{formula}: #{e.message}
'conflicts_with \"#{c.name}\"' should be removed from #{formula.path.basename}.
EOS
@@ -567,7 +568,7 @@ class FormulaInstaller
oh1 "Installing #{formula.full_name} dependency: #{Formatter.identifier(dep.name)}"
fi.install
fi.finish
- rescue Exception
+ rescue Exception # rubocop:disable Lint/RescueException
ignore_interrupts do
tmp_keg.rename(installed_keg) if tmp_keg && !installed_keg.directory?
linked_keg.link if keg_was_linked
@@ -723,7 +724,7 @@ class FormulaInstaller
if !formula.prefix.directory? || Keg.new(formula.prefix).empty_installation?
raise "Empty installation"
end
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
e.options = display_options(formula) if e.is_a?(BuildError)
ignore_interrupts do
# any exceptions must leave us with nothing installed
@@ -784,7 +785,7 @@ class FormulaInstaller
puts " brew link #{formula.name}"
@show_summary_heading = true
Homebrew.failed = true
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
onoe "An unexpected error occurred during the `brew link` step"
puts "The formula built, but is not symlinked into #{HOMEBREW_PREFIX}"
puts e
@@ -815,7 +816,7 @@ class FormulaInstaller
formula.plist_path.chmod 0644
log = formula.var/"log"
log.mkpath if formula.plist.include? log.to_s
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
onoe "Failed to install plist file"
ohai e, e.backtrace if debug?
Homebrew.failed = true
@@ -823,7 +824,7 @@ class FormulaInstaller
def fix_dynamic_linkage(keg)
keg.fix_dynamic_linkage
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
onoe "Failed to fix install linkage"
puts "The formula built, but you may encounter issues using it or linking other"
puts "formula against it."
@@ -835,7 +836,7 @@ class FormulaInstaller
def clean
ohai "Cleaning" if verbose?
Cleaner.new(formula).clean
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
opoo "The cleaning step did not complete successfully"
puts "Still, the installation was successful, so we will link it into your prefix"
ohai e, e.backtrace if debug?
@@ -845,7 +846,7 @@ class FormulaInstaller
def post_install
Homebrew.run_post_install(formula)
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
opoo "The post-install step did not complete successfully"
puts "You can try again using `brew postinstall #{formula.full_name}`"
ohai e, e.backtrace if debug?
@@ -905,27 +906,31 @@ class FormulaInstaller
super
end
+ def self.locked
+ @locked ||= []
+ end
+
private
attr_predicate :hold_locks?
def lock
- return unless (@@locked ||= []).empty?
+ return unless self.class.locked.empty?
unless ignore_deps?
formula.recursive_dependencies.each do |dep|
- @@locked << dep.to_formula
+ self.class.locked << dep.to_formula
end
end
- @@locked.unshift(formula)
- @@locked.uniq!
- @@locked.each(&:lock)
+ self.class.locked.unshift(formula)
+ self.class.locked.uniq!
+ self.class.locked.each(&:lock)
@hold_locks = true
end
def unlock
return unless hold_locks?
- @@locked.each(&:unlock)
- @@locked.clear
+ self.class.locked.each(&:unlock)
+ self.class.locked.clear
@hold_locks = false
end