add Formulary#from_keg

This commit is contained in:
Xu Cheng 2016-07-15 17:45:21 +08:00
parent 7452dcf508
commit c021f37525
No known key found for this signature in database
GPG Key ID: C2A3860FA0B459CE
2 changed files with 13 additions and 7 deletions

View File

@ -219,10 +219,18 @@ class Formulary
# It will auto resolve formula's spec when requested spec is nil
def self.from_rack(rack, spec = nil)
kegs = rack.directory? ? rack.subdirs.map { |d| Keg.new(d) } : []
keg = kegs.detect(&:linked?) || kegs.detect(&:optlinked?) || kegs.max_by(&:version)
return factory(rack.basename.to_s, spec || :stable) unless keg
if keg
from_keg(keg, spec)
else
factory(rack.basename.to_s, spec || :stable)
end
end
# Return a Formula instance for the given keg.
# It will auto resolve formula's spec when requested spec is nil
def self.from_keg(keg, spec = nil)
tab = Tab.for_keg(keg)
tap = tab.tap
spec ||= tab.spec
@ -231,10 +239,10 @@ class Formulary
factory(rack.basename.to_s, spec)
else
begin
factory("#{tap}/#{rack.basename}", spec)
factory("#{tap}/#{keg.rack.basename}", spec)
rescue FormulaUnavailableError
# formula may be migrated to different tap. Try to search in core and all taps.
factory(rack.basename.to_s, spec)
factory(keg.rack.basename.to_s, spec)
end
end
f.build = tab

View File

@ -129,9 +129,7 @@ class LinkageChecker
end
def resolve_formula(keg)
f = Formulary.from_rack(keg.rack)
f.build = Tab.for_keg(keg)
f
Formulary.from_keg(keg)
rescue FormulaUnavailableError
opoo "Formula unavailable: #{keg.name}"
end