Skip to content

Commit

Permalink
os/mac: prefer newest Xcode when searching using mdfind
Browse files Browse the repository at this point in the history
We're currently returning the first match for `com.apple.dt.Xcode`,
which could be any version if a user has multiple installed.

Instead, let's try to find the newest if all our results have an
`Info.plist` that we can interrogate for the version.

Maybe resolves #18736?
  • Loading branch information
carlocab committed Nov 8, 2024
1 parent a8a4c07 commit b61d445
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions Library/Homebrew/os/mac.rb
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,15 @@ def self.macports_or_fink

sig { params(ids: String).returns(T.nilable(Pathname)) }
def self.app_with_bundle_id(*ids)
path = mdfind(*ids)
.reject { |p| p.include?("/Backups.backupdb/") }
.first
Pathname.new(path) if path.present?
require "bundle_version"

Check warning on line 198 in Library/Homebrew/os/mac.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/os/mac.rb#L198

Added line #L198 was not covered by tests

paths = mdfind(*ids).filter_map do |bundle_path|

Check warning on line 200 in Library/Homebrew/os/mac.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/os/mac.rb#L200

Added line #L200 was not covered by tests
Pathname.new(bundle_path) if bundle_path.exclude?("/Backups.backupdb/")
end
return paths.first if paths.any? { |bp| !(bp/"Contents/Info.plist").exist? }

# Prefer newest one, if we can find it.
paths.max_by { |bundle_path| Homebrew::BundleVersion.from_info_plist(bundle_path/"Contents/Info.plist") }

Check warning on line 206 in Library/Homebrew/os/mac.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/os/mac.rb#L206

Added line #L206 was not covered by tests
end

sig { params(ids: String).returns(T::Array[String]) }
Expand Down

0 comments on commit b61d445

Please sign in to comment.