diff --git a/Library/Homebrew/dev-cmd/linkage.rb b/Library/Homebrew/dev-cmd/linkage.rb index d0370310f5..01bdfda57f 100644 --- a/Library/Homebrew/dev-cmd/linkage.rb +++ b/Library/Homebrew/dev-cmd/linkage.rb @@ -25,7 +25,7 @@ module Homebrew ohai "Checking #{keg.name} linkage" if ARGV.kegs.size > 1 use_cache = ARGV.include?("--cached") || ENV["HOMEBREW_LINKAGE_CACHE"] - result = LinkageChecker.new(keg, database_cache.db, use_cache) + result = LinkageChecker.new(keg, database_cache, use_cache) if ARGV.include?("--test") result.display_test_output diff --git a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb index 012716b10b..bd78f0e30b 100644 --- a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb +++ b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb @@ -68,7 +68,7 @@ module FormulaCellarChecks DatabaseCache.use(:linkage) do |database_cache| use_cache = !ENV["HOMEBREW_LINKAGE_CACHE"].nil? - checker = LinkageChecker.new(keg, database_cache.db, use_cache, formula) + checker = LinkageChecker.new(keg, database_cache, use_cache, formula) next unless checker.broken_library_linkage? output = <<~EOS diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 8ff186c8f4..2f4fc73ae7 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1529,7 +1529,7 @@ class Formula undeclared_deps = DatabaseCache.use(:linkage) do |database_cache| use_cache = !ENV["HOMEBREW_LINKAGE_CACHE"].nil? - linkage_checker = LinkageChecker.new(keg, database_cache.db, use_cache, self) + linkage_checker = LinkageChecker.new(keg, database_cache, use_cache, self) linkage_checker.undeclared_deps.map { |n| Dependency.new(n) } end diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 8901639fa6..946a6fddb3 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -613,7 +613,7 @@ class FormulaInstaller # Updates the cache for a particular formula after doing an install DatabaseCache.use(:linkage) do |database_cache| break if database_cache.empty? - LinkageChecker.new(keg, database_cache.db, false, formula) + LinkageChecker.new(keg, database_cache, false, formula) end # let's reset Utils.git_available? if we just installed git diff --git a/Library/Homebrew/linkage_checker.rb b/Library/Homebrew/linkage_checker.rb index 541f95848d..4cf84e1836 100644 --- a/Library/Homebrew/linkage_checker.rb +++ b/Library/Homebrew/linkage_checker.rb @@ -3,11 +3,16 @@ require "formula" require "linkage_cache_store" class LinkageChecker - def initialize(keg, db, use_cache = false, formula = nil) + def initialize(keg, database_cache, use_cache = false, formula = nil) @keg = keg @formula = formula || resolve_formula(keg) - @store = LinkageStore.new(keg.name, db) - flush_cache_and_check_dylibs unless use_cache + + if use_cache + @store = LinkageStore.new(keg.name, database_cache.db) + flush_cache_and_check_dylibs unless database_cache.db.key?(keg.name) + else + flush_cache_and_check_dylibs + end end def display_normal_output @@ -45,7 +50,7 @@ class LinkageChecker end def undeclared_deps - @undeclared_deps ||= store.fetch_type(:undeclared_deps) + @undeclared_deps ||= store.nil? ? [] : store.fetch_type(:undeclared_deps) end private @@ -55,37 +60,37 @@ class LinkageChecker # 'Hash-type' cache values def brewed_dylibs - @brewed_dylibs ||= store.fetch_type(:brewed_dylibs) + @brewed_dylibs ||= store.nil? ? {} : store.fetch_type(:brewed_dylibs) end def reverse_links - @reverse_links ||= store.fetch_type(:reverse_links) + @reverse_links ||= store.nil? ? {} : store.fetch_type(:reverse_links) end def broken_deps - @broken_deps ||= store.fetch_type(:broken_deps) + @broken_deps ||= store.nil? ? {} : store.fetch_type(:broken_deps) end # 'Path-type' cached values def system_dylibs - @system_dylibs ||= store.fetch_type(:system_dylibs) + @system_dylibs ||= store.nil? ? [] : store.fetch_type(:system_dylibs) end def broken_dylibs - @broken_dylibs ||= store.fetch_type(:broken_dylibs) + @broken_dylibs ||= store.nil? ? [] : store.fetch_type(:broken_dylibs) end def variable_dylibs - @variable_dylibs ||= store.fetch_type(:variable_dylibs) + @variable_dylibs ||= store.nil? ? [] : store.fetch_type(:variable_dylibs) end def indirect_deps - @indirect_deps ||= store.fetch_type(:indirect_deps) + @indirect_deps ||= store.nil? ? [] : store.fetch_type(:indirect_deps) end def unnecessary_deps - @unnecessary_deps ||= store.fetch_type(:unnecessary_deps) + @unnecessary_deps ||= store.nil? ? [] : store.fetch_type(:unnecessary_deps) end def dylib_to_dep(dylib) @@ -235,9 +240,9 @@ class LinkageChecker opoo "Formula unavailable: #{keg.name}" end - # Helper function to reset dylib values when building cache + # Helper function to reset dylib values def reset_dylibs! - store.flush_cache! + store&.flush_cache! @system_dylibs = Set.new @broken_dylibs = Set.new @variable_dylibs = Set.new @@ -251,7 +256,7 @@ class LinkageChecker # Updates data store with package path values def store_dylibs! - store.update!( + store&.update!( system_dylibs: system_dylibs, variable_dylibs: variable_dylibs, broken_dylibs: broken_dylibs,