diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 53ec1ee33b5df977cdb90baac98637fbefc08b71..6812b905f46a4c508a1c800909a87841e832aa87 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1477,21 +1477,10 @@ class Formula end end - # Clear cache of .racks - def self.clear_racks_cache - @racks = nil - end - - # Clear caches of .racks and .installed. - def self.clear_installed_formulae_cache - clear_racks_cache - @installed = nil - end - # An array of all racks currently installed. # @private def self.racks - @racks ||= if HOMEBREW_CELLAR.directory? + Formula.cache[:racks] ||= if HOMEBREW_CELLAR.directory? HOMEBREW_CELLAR.subdirs.reject do |rack| rack.symlink? || rack.basename.to_s.start_with?(".") || rack.subdirs.empty? end @@ -1503,7 +1492,7 @@ class Formula # An array of all installed {Formula} # @private def self.installed - @installed ||= racks.flat_map do |rack| + Formula.cache[:installed] ||= racks.flat_map do |rack| Formulary.from_rack(rack) rescue [] diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 9911f18d27e9357155a3acfcc9561adcb36112ed..c9a29c331538d21ef207eedc023aba9729d42f25 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -854,10 +854,11 @@ class FormulaInstaller end def link(keg) + Formula.clear_cache + unless link_keg begin keg.optlink(verbose: verbose?) - Formula.clear_cache rescue Keg::LinkError => e onoe "Failed to create #{formula.opt_prefix}" puts "Things that depend on #{formula.full_name} will probably not build." diff --git a/Library/Homebrew/tab.rb b/Library/Homebrew/tab.rb index 099eb3b1e96478903e0f1d96552e50abe1834327..d1bf8fc2413da7c73cb9a915b67ad6c3d436696a 100644 --- a/Library/Homebrew/tab.rb +++ b/Library/Homebrew/tab.rb @@ -355,7 +355,7 @@ class Tab < OpenStruct def write # If this is a new installation, the cache of installed formulae # will no longer be valid. - Formula.clear_installed_formulae_cache unless tabfile.exist? + Formula.clear_cache unless tabfile.exist? self.class.cache[tabfile] = self tabfile.atomic_write(to_json) diff --git a/Library/Homebrew/test/keg_spec.rb b/Library/Homebrew/test/keg_spec.rb index 4c81962a16cda664583eb70c6be5cb53da2938ae..73e87d6c9aeefaa41edcde8763cc00436d22588f 100644 --- a/Library/Homebrew/test/keg_spec.rb +++ b/Library/Homebrew/test/keg_spec.rb @@ -36,7 +36,6 @@ describe Keg do end specify "::all" do - Formula.clear_racks_cache expect(described_class.all).to eq([keg]) end diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index 9eb4d981d38602d746474db9ac769886a03b8203..1fa4e8313fa09b1c4814a67d5c94e1c6b2c48d01 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -128,6 +128,7 @@ module Homebrew .select do |f| keg = f.any_installed_keg next unless keg + next unless keg.directory? LinkageChecker.new(keg, cache_db: db) .broken_library_linkage? @@ -186,7 +187,7 @@ module Homebrew upgrade_formulae(upgradeable_dependents, args: args) - # Refresh installed formulae after upgrading + # Update installed formulae after upgrading installed_formulae = FormulaInstaller.installed.to_a # Assess the dependents tree again now we've upgraded.