Changed cache usage behavior.

1. Running `brew linkage some_package` does not set the cache.
2. Running `brew linkage --cached some_package` when `DatabaseCache.empty?` returns `true` should build the cache.
3. Running `brew linkage --cached some_package` when `DatabaseCache.empty?` returns `false` should use the cache.
This commit is contained in:
Andrew R. McBurney 2018-05-21 16:15:52 -04:00
parent 360a301503
commit 010207b982
5 changed files with 24 additions and 19 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,