Skip to content

Commit 0ac4836

Browse files
authored
Merge pull request #20895 from Homebrew/tap-path-and-latest-formula
Add `Formula#tap_path` and use `Formula#latest_formula`
2 parents 209b66d + de7e904 commit 0ac4836

File tree

8 files changed

+31
-9
lines changed

8 files changed

+31
-9
lines changed

Library/Homebrew/cmd/outdated.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def print_outdated(formulae_or_casks)
101101
# There is a newer HEAD but the version number has not changed.
102102
"latest HEAD"
103103
else
104-
f.pkg_version.to_s
104+
f.latest_formula.pkg_version.to_s
105105
end
106106

107107
outdated_versions = outdated_kegs.group_by { |keg| Formulary.from_keg(keg).full_name }

Library/Homebrew/cmd/reinstall.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def run
141141
end
142142
Migrator.migrate_if_needed(formula, force: args.force?)
143143
Homebrew::Reinstall.build_install_context(
144-
formula,
144+
formula.latest_formula,
145145
flags: args.flags_only,
146146
force_bottle: args.force_bottle?,
147147
build_from_source_formulae: args.build_from_source_formulae,

Library/Homebrew/dev-cmd/bottle.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -661,8 +661,8 @@ def bottle_formula(formula)
661661
"formula" => {
662662
"name" => formula.name,
663663
"pkg_version" => formula.pkg_version.to_s,
664-
"path" => formula.path.to_s.delete_prefix("#{HOMEBREW_REPOSITORY}/"),
665-
"tap_git_path" => formula.path.to_s.delete_prefix("#{tap_path}/"),
664+
"path" => formula.tap_path.to_s.delete_prefix("#{HOMEBREW_REPOSITORY}/"),
665+
"tap_git_path" => formula.tap_path.to_s.delete_prefix("#{tap_path}/"),
666666
"tap_git_revision" => tap_git_revision,
667667
"tap_git_remote" => tap_git_remote,
668668
# descriptions can contain emoji. sigh.

Library/Homebrew/formula.rb

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,13 @@ def installed_alias_name = installed_alias_path&.basename&.to_s
426426
sig { returns(T.nilable(String)) }
427427
def full_installed_alias_name = full_name_with_optional_tap(installed_alias_name)
428428

429+
sig { returns(Pathname) }
430+
def tap_path
431+
return path unless (t = tap)
432+
433+
t.new_formula_path(name)
434+
end
435+
429436
# The path that was specified to find this formula.
430437
sig { returns(T.nilable(Pathname)) }
431438
def specified_path
@@ -1714,14 +1721,15 @@ def outdated_kegs(fetch_head: false)
17141721
Formula.cache[:outdated_kegs][cache_key] ||= begin
17151722
all_kegs = []
17161723
current_version = T.let(false, T::Boolean)
1724+
latest = latest_formula
17171725

17181726
installed_kegs.each do |keg|
17191727
all_kegs << keg
17201728
version = keg.version
17211729
next if version.head?
17221730

1723-
next if version_scheme > keg.version_scheme && pkg_version != version
1724-
next if version_scheme == keg.version_scheme && pkg_version > version
1731+
next if latest.version_scheme > keg.version_scheme && latest.pkg_version != version
1732+
next if latest.version_scheme == keg.version_scheme && latest.pkg_version > version
17251733

17261734
# don't consider this keg current if there's a newer formula available
17271735
next if follow_installed_alias? && new_formula_available?
@@ -1779,7 +1787,7 @@ def alias_changed?
17791787
# Otherwise, return self.
17801788
sig { returns(Formula) }
17811789
def latest_formula
1782-
installed_alias_target_changed? ? T.must(current_installed_alias_target) : self
1790+
installed_alias_target_changed? ? T.must(current_installed_alias_target) : Formulary.factory(name)
17831791
end
17841792

17851793
sig { returns(T::Array[Formula]) }

Library/Homebrew/formula_versions.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class FormulaVersions
2020
sig { params(formula: Formula).void }
2121
def initialize(formula)
2222
@name = formula.name
23-
@path = formula.path
23+
@path = formula.tap_path
2424
@repository = T.must(formula.tap).path
2525
@relative_path = @path.relative_path_from(repository).to_s
2626
# Also look at e.g. older homebrew-core paths before sharding.

Library/Homebrew/test/formula_spec.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -880,6 +880,8 @@ def post_install
880880

881881
expect(f3.runtime_dependencies.map(&:name)).to eq(["baz/qux/f2"])
882882

883+
described_class.clear_cache
884+
883885
f1_path = Tap.fetch("foo", "bar").path/"Formula/f1.rb"
884886
stub_formula_loader(formula("f1", path: f1_path) { url("f1-1.0") }, "foo/bar/f1")
885887

@@ -965,6 +967,7 @@ def post_install
965967
sha256 cellar: :any, Utils::Bottles.tag.to_sym => TEST_SHA256
966968
end
967969
end
970+
stub_formula_loader(f1)
968971

969972
h = f1.to_hash
970973

@@ -1275,6 +1278,8 @@ def pour_bottle?
12751278
let(:alias_path) { CoreTap.instance.alias_dir/alias_name }
12761279

12771280
before do
1281+
stub_formula_loader(f)
1282+
stub_formula_loader(new_formula)
12781283
allow(described_class).to receive(:installed).and_return([f])
12791284

12801285
f.build = tab
@@ -1367,6 +1372,12 @@ def pour_bottle?
13671372
let(:alias_name) { "bar" }
13681373
let(:alias_path) { f.tap.alias_dir/alias_name }
13691374

1375+
before do
1376+
stub_formula_loader(f)
1377+
stub_formula_loader(old_formula)
1378+
stub_formula_loader(new_formula)
1379+
end
1380+
13701381
def setup_tab_for_prefix(prefix, options = {})
13711382
prefix.mkpath
13721383

Library/Homebrew/test/migrator_spec.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121

2222
before do |example|
2323
allow(new_formula).to receive(:oldnames).and_return(["oldname"])
24+
allow(Formulary).to receive(:factory).with("homebrew/core/oldname", any_args).and_return(old_formula)
25+
allow(Formulary).to receive(:factory).with("oldname", any_args).and_return(old_formula)
26+
allow(Formulary).to receive(:factory).with("newname", any_args).and_return(new_formula)
2427

2528
# do not create directories for error tests
2629
next if example.metadata[:description].start_with?("raises an error")

Library/Homebrew/test/support/helper/formula.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def formula(name = "formula_name", path: nil, spec: :stable, alias_path: nil, ta
1515
def stub_formula_loader(formula, ref = formula.full_name, call_original: false)
1616
allow(Formulary).to receive(:loader_for).and_call_original if call_original
1717

18-
loader = instance_double(Formulary::FormulaLoader, get_formula: formula)
18+
loader = instance_double(Formulary::FormulaLoader, get_formula: formula, name: formula.name)
1919
allow(Formulary).to receive(:loader_for).with(ref, any_args).and_return(loader)
2020
end
2121
end

0 commit comments

Comments
 (0)