Skip to content

Commit 0d9b9b4

Browse files
authored
Merge pull request #20940 from Homebrew/fix-outdated-head
Display correct outdated head information
2 parents 6f0a1df + 2f942de commit 0d9b9b4

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

Library/Homebrew/cmd/outdated.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,14 @@ def print_outdated(formulae_or_casks)
9797
current_version = if f.alias_changed? && !f.latest_formula.latest_version_installed?
9898
latest = f.latest_formula
9999
"#{latest.name} (#{latest.pkg_version})"
100-
elsif f.head? && outdated_kegs.any? { |k| k.version.to_s == f.pkg_version.to_s }
101-
# There is a newer HEAD but the version number has not changed.
102-
"latest HEAD"
100+
elsif f.head?
101+
latest_head_version = f.latest_head_pkg_version(fetch_head: args.fetch_HEAD?)
102+
if outdated_kegs.any? { |k| k.version.to_s == latest_head_version.to_s }
103+
# There is a newer HEAD but the version number has not changed.
104+
"latest HEAD"
105+
else
106+
latest_head_version.to_s
107+
end
103108
else
104109
f.latest_formula.pkg_version.to_s
105110
end

Library/Homebrew/download_strategy.rb

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,21 +1239,21 @@ def initialize(url, name, version, **meta)
12391239
@repo = T.let(match_data[:repo], T.nilable(String))
12401240
end
12411241

1242+
sig { override.returns(String) }
1243+
def last_commit
1244+
@last_commit ||= GitHub.last_commit(@user, @repo, @ref, version) || super
1245+
end
1246+
12421247
sig { override.params(commit: T.nilable(String)).returns(T::Boolean) }
12431248
def commit_outdated?(commit)
1244-
@last_commit ||= GitHub.last_commit(@user, @repo, @ref, version)
1245-
if @last_commit
1246-
return true unless commit
1247-
return true unless @last_commit.start_with?(commit)
1249+
return true unless commit
1250+
return true unless last_commit.start_with?(commit)
12481251

1249-
if GitHub.multiple_short_commits_exist?(@user, @repo, commit)
1250-
true
1251-
else
1252-
T.must(@version).update_commit(commit)
1253-
false
1254-
end
1252+
if GitHub.multiple_short_commits_exist?(@user, @repo, commit)
1253+
true
12551254
else
1256-
super
1255+
T.must(@version).update_commit(commit)
1256+
false
12571257
end
12581258
end
12591259

Library/Homebrew/formula.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,17 @@ def head_version_outdated?(version, fetch_head: false)
843843
end
844844
end
845845

846+
sig { params(fetch_head: T::Boolean).returns(PkgVersion) }
847+
def latest_head_pkg_version(fetch_head: false)
848+
return pkg_version unless (latest_version = latest_head_version)
849+
return latest_version unless head_version_outdated?(latest_version, fetch_head:)
850+
851+
downloader = T.must(head).downloader
852+
with_context quiet: true do
853+
PkgVersion.new(Version.new("HEAD-#{downloader.last_commit}"), revision)
854+
end
855+
end
856+
846857
# The latest prefix for this formula. Checks for {#head} and then {#stable}'s {#prefix}.
847858
sig { returns(Pathname) }
848859
def latest_installed_prefix

0 commit comments

Comments
 (0)