formula_auditor: fix versioned alias audit
* Fix audit not being run at all due to always-false condition. * Don't fail audit if versioned alias would clash with a versioned formula. * Allow versioned aliases with the name of another alias.
This commit is contained in:
		
							parent
							
								
									600d84e56e
								
							
						
					
					
						commit
						5ea092c464
					
				@ -68,31 +68,42 @@ module Homebrew
 | 
			
		||||
          unversioned_name = unversioned_formula.basename(".rb")
 | 
			
		||||
          problem "#{formula} is versioned but no #{unversioned_name} formula exists"
 | 
			
		||||
        end
 | 
			
		||||
      elsif @build_stable &&
 | 
			
		||||
            formula.stable? &&
 | 
			
		||||
      elsif formula.stable? &&
 | 
			
		||||
            !@versioned_formula &&
 | 
			
		||||
            (versioned_formulae = formula.versioned_formulae - [formula]) &&
 | 
			
		||||
            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("@")
 | 
			
		||||
 | 
			
		||||
        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_major
 | 
			
		||||
        else
 | 
			
		||||
          alias_name_major_minor
 | 
			
		||||
        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
 | 
			
		||||
          versioned_aliases.map! { |a| "#{formula.tap}/#{a}" }
 | 
			
		||||
          valid_alias_names.map! { |a| "#{formula.tap}/#{a}" }
 | 
			
		||||
        # Also accept versioned aliases with names of other aliases, but do not require them.
 | 
			
		||||
        valid_other_alias_names = unversioned_aliases.flat_map do |name|
 | 
			
		||||
          %W[
 | 
			
		||||
            #{name}@#{formula.version.major}
 | 
			
		||||
            #{name}@#{formula.version.major_minor}
 | 
			
		||||
          ].uniq
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        valid_versioned_aliases = versioned_aliases & valid_alias_names
 | 
			
		||||
        invalid_versioned_aliases = versioned_aliases - valid_alias_names
 | 
			
		||||
        unless @core_tap
 | 
			
		||||
          [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
 | 
			
		||||
            problem <<~EOS
 | 
			
		||||
              Formula has other versions so create a versioned alias:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user