Skip to content

Commit

Permalink
formulary: don't warn on old formula name from keg/rack.
Browse files Browse the repository at this point in the history
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 Homebrew#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 Homebrew#1459.
  • Loading branch information
MikeMcQuaid committed Nov 11, 2016
1 parent 8fea516 commit b32fafa
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 12 deletions.
23 changes: 12 additions & 11 deletions Library/Homebrew/formulary.rb
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,9 @@ def load_file
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

Expand Down Expand Up @@ -236,8 +237,8 @@ def klass
# * 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.
Expand All @@ -253,7 +254,7 @@ def self.from_rack(rack, spec = nil, alias_path: nil)
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

Expand All @@ -265,13 +266,13 @@ def self.from_keg(keg, spec = nil, alias_path: nil)
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
Expand Down Expand Up @@ -309,14 +310,14 @@ def self.path(ref)
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"
Expand Down Expand Up @@ -359,7 +360,7 @@ def self.loader_for(ref)
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")
Expand Down
3 changes: 2 additions & 1 deletion Library/Homebrew/test/testing_env.rb
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ def bundle_path(name)
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

0 comments on commit b32fafa

Please sign in to comment.