From 2b1f460289d2ef8106814e750e38a4c65dbf5cdf Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Tue, 23 Feb 2021 10:19:45 +0000 Subject: [PATCH] Fix `installed_on_request` for dependencies. Dependencies were using `Tab.for_formula(df)` to get a `Tab` which meant that they were always ending up with the (default) value of `true` for `installed_on_request`. Fix this by: - setting `installed_on_request` to `false` by default in empty `Tab`s; we always override it on installation so we'd rather have it default to `false` - only read and use a `Tab` for the existing dependency formula if there's an existing `Keg` --- Library/Homebrew/formula_installer.rb | 11 ++++++----- Library/Homebrew/tab.rb | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 82c07fbe90..c1456aa541 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -707,10 +707,10 @@ class FormulaInstaller sig { params(dep: Dependency, inherited_options: Options).void } def install_dependency(dep, inherited_options) df = dep.to_formula - tab = Tab.for_formula(df) if df.linked_keg.directory? linked_keg = Keg.new(df.linked_keg.resolved_path) + tab = Tab.for_keg(linked_keg) keg_had_linked_keg = true keg_was_linked = linked_keg.linked? linked_keg.unlink @@ -718,12 +718,13 @@ class FormulaInstaller if df.latest_version_installed? installed_keg = Keg.new(df.prefix) + tab ||= Tab.for_keg(linked_keg) tmp_keg = Pathname.new("#{installed_keg}.tmp") installed_keg.rename(tmp_keg) end - tab_tap = tab.source["tap"] - if tab_tap.present? && df.tap.present? && df.tap.to_s != tab_tap.to_s + if df.tap.present? && tab.present? && (tab_tap = tab.source["tap"].presence) && + df.tap.to_s != tab_tap.to_s odie <<~EOS #{df} is already installed from #{tab_tap}! Please `brew uninstall #{df}` first." @@ -731,7 +732,7 @@ class FormulaInstaller end options = Options.new - options |= tab.used_options + options |= tab.used_options if tab.present? options |= Tab.remap_deprecated_options(df.deprecated_options, dep.options) options |= inherited_options options &= df.options @@ -742,7 +743,7 @@ class FormulaInstaller options: options, link_keg: keg_had_linked_keg ? keg_was_linked : nil, installed_as_dependency: true, - installed_on_request: df.any_version_installed? && tab.installed_on_request, + installed_on_request: df.any_version_installed? && tab.present? && tab.installed_on_request, force_bottle: false, include_test_formulae: @include_test_formulae, build_from_source_formulae: @build_from_source_formulae, diff --git a/Library/Homebrew/tab.rb b/Library/Homebrew/tab.rb index 29c1e7d511..3175ad447f 100644 --- a/Library/Homebrew/tab.rb +++ b/Library/Homebrew/tab.rb @@ -29,7 +29,7 @@ class Tab < OpenStruct "tabfile" => formula.prefix/FILENAME, "built_as_bottle" => build.bottle?, "installed_as_dependency" => false, - "installed_on_request" => true, + "installed_on_request" => false, "poured_from_bottle" => false, "time" => Time.now.to_i, "source_modified_time" => formula.source_modified_time.to_i, @@ -184,7 +184,7 @@ class Tab < OpenStruct "unused_options" => [], "built_as_bottle" => false, "installed_as_dependency" => false, - "installed_on_request" => true, + "installed_on_request" => false, "poured_from_bottle" => false, "time" => nil, "source_modified_time" => 0,