Merge pull request #13015 from Bo98/alias-audit

formula_auditor: fix versioned alias audit
This commit is contained in:
Bo Anderson 2022-03-21 15:11:56 +00:00 committed by GitHub
commit 23b32725bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -68,31 +68,42 @@ module Homebrew
unversioned_name = unversioned_formula.basename(".rb") unversioned_name = unversioned_formula.basename(".rb")
problem "#{formula} is versioned but no #{unversioned_name} formula exists" problem "#{formula} is versioned but no #{unversioned_name} formula exists"
end end
elsif @build_stable && elsif formula.stable? &&
formula.stable? &&
!@versioned_formula && !@versioned_formula &&
(versioned_formulae = formula.versioned_formulae - [formula]) && (versioned_formulae = formula.versioned_formulae - [formula]) &&
versioned_formulae.present? versioned_formulae.present?
versioned_aliases = formula.aliases.grep(/.@\d/) versioned_aliases, unversioned_aliases = formula.aliases.partition { |a| a =~ /.@\d/ }
_, last_alias_version = versioned_formulae.map(&:name).last.split("@") _, last_alias_version = versioned_formulae.map(&:name).last.split("@")
alias_name_major = "#{formula.name}@#{formula.version.major}" alias_name_major = "#{formula.name}@#{formula.version.major}"
alias_name_major_minor = "#{alias_name_major}.#{formula.version.minor}" alias_name_major_minor = "#{formula.name}@#{formula.version.major_minor}"
alias_name = if last_alias_version.split(".").length == 1 alias_name = if last_alias_version.split(".").length == 1
alias_name_major alias_name_major
else else
alias_name_major_minor alias_name_major_minor
end end
valid_alias_names = [alias_name_major, alias_name_major_minor] valid_main_alias_names = [alias_name_major, alias_name_major_minor].uniq
unless @core_tap # Also accept versioned aliases with names of other aliases, but do not require them.
versioned_aliases.map! { |a| "#{formula.tap}/#{a}" } valid_other_alias_names = unversioned_aliases.flat_map do |name|
valid_alias_names.map! { |a| "#{formula.tap}/#{a}" } %W[
#{name}@#{formula.version.major}
#{name}@#{formula.version.major_minor}
].uniq
end end
valid_versioned_aliases = versioned_aliases & valid_alias_names unless @core_tap
invalid_versioned_aliases = versioned_aliases - valid_alias_names [versioned_aliases, valid_main_alias_names, valid_other_alias_names].each do |array|
array.map! { |a| "#{formula.tap}/#{a}" }
end
end
if valid_versioned_aliases.empty? valid_versioned_aliases = versioned_aliases & valid_main_alias_names
invalid_versioned_aliases = versioned_aliases - valid_main_alias_names - valid_other_alias_names
latest_versioned_formula = versioned_formulae.map(&:name).first
if valid_versioned_aliases.empty? && alias_name != latest_versioned_formula
if formula.tap if formula.tap
problem <<~EOS problem <<~EOS
Formula has other versions so create a versioned alias: Formula has other versions so create a versioned alias: