Merge pull request #1850 from MikeMcQuaid/audit-version-aliases

audit: check for version aliases.
This commit is contained in:
Mike McQuaid 2017-02-21 17:28:18 +00:00 committed by GitHub
commit 8a4bfff2c0
2 changed files with 32 additions and 11 deletions

View File

@ -295,6 +295,27 @@ class FormulaAuditor
problem "File should end with a newline" unless text.trailing_newline? problem "File should end with a newline" unless text.trailing_newline?
versioned_formulae = Dir[formula.path.to_s.gsub(/\.rb$/, "@*.rb")]
needs_versioned_alias = !versioned_formulae.empty? &&
formula.tap &&
formula.aliases.grep(/.@\d/).empty?
if needs_versioned_alias
_, last_alias_version = File.basename(versioned_formulae.sort.reverse.first)
.gsub(/\.rb$/, "")
.split("@")
major, minor, = formula.version.to_s.split(".")
alias_name = if last_alias_version.split(".").length == 1
"#{formula.name}@#{major}"
else
"#{formula.name}@#{major}.#{minor}"
end
problem <<-EOS.undent
Formula has other versions so create an alias:
cd #{formula.tap.alias_dir}
ln -s #{formula.path.to_s.gsub(formula.tap.path, "..")} #{alias_name}
EOS
end
return unless @strict return unless @strict
present = audit_components present = audit_components
@ -410,7 +431,8 @@ class FormulaAuditor
problem "Dependency '#{dep.name}' was renamed; use new name '#{dep_f.name}'." problem "Dependency '#{dep.name}' was renamed; use new name '#{dep_f.name}'."
end end
if @@aliases.include?(dep.name) if @@aliases.include?(dep.name) &&
(core_formula? || !dep_f.versioned_formula?)
problem "Dependency '#{dep.name}' is an alias; use the canonical name '#{dep.to_formula.full_name}'." problem "Dependency '#{dep.name}' is an alias; use the canonical name '#{dep.to_formula.full_name}'."
end end

View File

@ -24,16 +24,15 @@ module Readall
!failed !failed
end end
def valid_aliases?(alias_dirs) def valid_aliases?(alias_dir, formula_dir)
return false unless alias_dir.directory?
failed = false failed = false
alias_dirs.each do |alias_dir| alias_dir.each_child do |f|
next unless alias_dir.directory? next unless f.symlink?
alias_dir.children.each do |f| next if f.file? && !(formula_dir/"#{f.basename}.rb").exist?
next unless f.symlink? onoe "Broken alias: #{f}"
next if f.file? failed = true
onoe "Broken alias: #{f}"
failed = true
end
end end
!failed !failed
end end
@ -57,7 +56,7 @@ module Readall
def valid_tap?(tap, options = {}) def valid_tap?(tap, options = {})
failed = false failed = false
if options[:aliases] if options[:aliases]
valid_aliases = valid_aliases?([tap.alias_dir]) valid_aliases = valid_aliases?(tap.alias_dir, tap.formula_dir)
failed = true unless valid_aliases failed = true unless valid_aliases
end end
valid_formulae = valid_formulae?(tap.formula_files) valid_formulae = valid_formulae?(tap.formula_files)