formulary: don't warn on old formula name from keg/rack.
If there’s an old installation of e.g. `apple-gcc42` from when it was part of `homebrew/core` then the tab will say it was from the `homebrew/core` tap and then we’ll complain at the user (see #1459 for an example). Instead, we only want to complain when the user actually types in `homebrew/core/apple-gcc42` into a `brew` command. Closes #1459.
This commit is contained in:
		
							parent
							
								
									8fea516dcd
								
							
						
					
					
						commit
						b32fafa82c
					
				| @ -158,8 +158,9 @@ class Formulary | ||||
|   class TapLoader < FormulaLoader | ||||
|     attr_reader :tap | ||||
| 
 | ||||
|     def initialize(tapped_name) | ||||
|       name, path = formula_name_path(tapped_name) | ||||
|     def initialize(tapped_name, from: nil) | ||||
|       warn = ![:keg, :rack].include?(from) | ||||
|       name, path = formula_name_path(tapped_name, warn: warn) | ||||
|       super name, path | ||||
|     end | ||||
| 
 | ||||
| @ -236,8 +237,8 @@ class Formulary | ||||
|   # * a formula pathname | ||||
|   # * a formula URL | ||||
|   # * a local bottle reference | ||||
|   def self.factory(ref, spec = :stable, alias_path: nil) | ||||
|     loader_for(ref).get_formula(spec, alias_path: alias_path) | ||||
|   def self.factory(ref, spec = :stable, alias_path: nil, from: nil) | ||||
|     loader_for(ref, from: from).get_formula(spec, alias_path: alias_path) | ||||
|   end | ||||
| 
 | ||||
|   # Return a Formula instance for the given rack. | ||||
| @ -253,7 +254,7 @@ class Formulary | ||||
|     if keg | ||||
|       from_keg(keg, spec, alias_path: alias_path) | ||||
|     else | ||||
|       factory(rack.basename.to_s, spec || :stable, alias_path: alias_path) | ||||
|       factory(rack.basename.to_s, spec || :stable, alias_path: alias_path, from: :rack) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| @ -265,13 +266,13 @@ class Formulary | ||||
|     spec ||= tab.spec | ||||
| 
 | ||||
|     f = if tap.nil? | ||||
|       factory(keg.rack.basename.to_s, spec, alias_path: alias_path) | ||||
|       factory(keg.rack.basename.to_s, spec, alias_path: alias_path, from: :keg) | ||||
|     else | ||||
|       begin | ||||
|         factory("#{tap}/#{keg.rack.basename}", spec, alias_path: alias_path) | ||||
|         factory("#{tap}/#{keg.rack.basename}", spec, alias_path: alias_path, from: :keg) | ||||
|       rescue FormulaUnavailableError | ||||
|         # formula may be migrated to different tap. Try to search in core and all taps. | ||||
|         factory(keg.rack.basename.to_s, spec, alias_path: alias_path) | ||||
|         factory(keg.rack.basename.to_s, spec, alias_path: alias_path, from: :keg) | ||||
|       end | ||||
|     end | ||||
|     f.build = tab | ||||
| @ -309,14 +310,14 @@ class Formulary | ||||
|     loader_for(ref).path | ||||
|   end | ||||
| 
 | ||||
|   def self.loader_for(ref) | ||||
|   def self.loader_for(ref, from: nil) | ||||
|     case ref | ||||
|     when %r{(https?|ftp|file)://} | ||||
|       return FromUrlLoader.new(ref) | ||||
|     when Pathname::BOTTLE_EXTNAME_RX | ||||
|       return BottleLoader.new(ref) | ||||
|     when HOMEBREW_TAP_FORMULA_REGEX | ||||
|       return TapLoader.new(ref) | ||||
|       return TapLoader.new(ref, from: from) | ||||
|     end | ||||
| 
 | ||||
|     return FromPathLoader.new(ref) if File.extname(ref) == ".rb" | ||||
| @ -359,7 +360,7 @@ class Formulary | ||||
|     end | ||||
| 
 | ||||
|     unless possible_tap_newname_formulae.empty? | ||||
|       return TapLoader.new(possible_tap_newname_formulae.first) | ||||
|       return TapLoader.new(possible_tap_newname_formulae.first, from: from) | ||||
|     end | ||||
| 
 | ||||
|     possible_cached_formula = Pathname.new("#{HOMEBREW_CACHE_FORMULA}/#{ref}.rb") | ||||
|  | ||||
| @ -119,7 +119,8 @@ module Homebrew | ||||
|     def stub_formula_loader(formula, ref = formula.full_name) | ||||
|       loader = mock | ||||
|       loader.stubs(:get_formula).returns(formula) | ||||
|       Formulary.stubs(:loader_for).with(ref).returns(loader) | ||||
|       Formulary.stubs(:loader_for).with(ref, from: :keg).returns(loader) | ||||
|       Formulary.stubs(:loader_for).with(ref, from: nil).returns(loader) | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Mike McQuaid
						Mike McQuaid