audit: more checks for versioned aliases.

Check that a required versioned alias has a valid name (rather than
assuming it’s fine based on it’s existence alone) and check for
the presence of invalid version aliases.

This should handle the case where someone bumps a formula but forgets
to rename the alias that’s mentioned in #2596.
This commit is contained in:
Mike McQuaid 2017-05-09 15:10:29 +01:00
parent f1d4c4be78
commit b14f1572b7

View File

@ -307,26 +307,42 @@ class FormulaAuditor
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 ARGV.build_stable? elsif ARGV.build_stable? &&
versioned_formulae = Dir[formula.path.to_s.gsub(/\.rb$/, "@*.rb")] !(versioned_formulae = Dir[formula.path.to_s.gsub(/\.rb$/, "@*.rb")]).empty?
needs_versioned_alias = !versioned_formulae.empty? && versioned_aliases = formula.aliases.grep(/.@\d/)
formula.tap && _, last_alias_version =
formula.aliases.grep(/.@\d/).empty? File.basename(versioned_formulae.sort.reverse.first)
if needs_versioned_alias .gsub(/\.rb$/, "").split("@")
_, last_alias_version = File.basename(versioned_formulae.sort.reverse.first)
.gsub(/\.rb$/, "")
.split("@")
major, minor, = formula.version.to_s.split(".") major, minor, = formula.version.to_s.split(".")
alias_name_major = "#{formula.name}@#{major}"
alias_name_major_minor = "#{alias_name_major}.#{minor}"
alias_name = if last_alias_version.split(".").length == 1 alias_name = if last_alias_version.split(".").length == 1
"#{formula.name}@#{major}" alias_name_major
else else
"#{formula.name}@#{major}.#{minor}" alias_name_major_minor
end end
valid_alias_names = [alias_name_major, alias_name_major_minor]
valid_versioned_aliases = versioned_aliases & valid_alias_names
invalid_versioned_aliases = versioned_aliases - valid_alias_names
if valid_versioned_aliases.empty?
if formula.tap
problem <<-EOS.undent problem <<-EOS.undent
Formula has other versions so create an alias: Formula has other versions so create a versioned alias:
cd #{formula.tap.alias_dir} cd #{formula.tap.alias_dir}
ln -s #{formula.path.to_s.gsub(formula.tap.path, "..")} #{alias_name} ln -s #{formula.path.to_s.gsub(formula.tap.path, "..")} #{alias_name}
EOS EOS
else
problem "Formula has other versions so create an alias named #{alias_name}."
end
end
unless invalid_versioned_aliases.empty?
problem <<-EOS.undent
Formula has invalid versioned aliases:
#{invalid_versioned_aliases.join("\n ")}
EOS
end end
end end
end end