Class: Formulary::FromBottleLoader Private

Inherits:
FormulaLoader show all
Defined in:
formulary.rb

Overview

This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.

Loads a formula from a bottle.

Instance Attribute Summary

Attributes inherited from FormulaLoader

#alias_path, #name, #path, #tap

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from FormulaLoader

#klass

Methods included from Context

current, current=, #debug?, #quiet?, #verbose?, #with_context

Constructor Details

#initialize(bottle_name) ⇒ FromBottleLoader

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns a new instance of FromBottleLoader.



556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
# File 'formulary.rb', line 556

def initialize(bottle_name)
  case bottle_name
  when URL_START_REGEX
    # The name of the formula is found between the last slash and the last hyphen.
    formula_name = File.basename(bottle_name)[/(.+)-/, 1]
    resource = Resource.new(formula_name) { url bottle_name }
    resource.specs[:bottle] = true
    downloader = resource.downloader
    cached = downloader.cached_location.exist?
    downloader.fetch
    ohai "Pouring the cached bottle" if cached
    @bottle_filename = downloader.cached_location
  else
    @bottle_filename = Pathname(bottle_name).realpath
  end
  name, full_name = Utils::Bottles.resolve_formula_names @bottle_filename
  super name, Formulary.path(full_name)
end

Class Method Details

.try_new(ref, from: T.unsafe(nil), warn: false) ⇒ T.attached_class?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • ref (String, Pathname, URI::Generic)
  • from (Symbol) (defaults to: T.unsafe(nil))
  • warn (Boolean) (defaults to: false)

Returns:

  • (T.attached_class, nil)


550
551
552
553
554
# File 'formulary.rb', line 550

def self.try_new(ref, from: T.unsafe(nil), warn: false)
  ref = ref.to_s

  new(ref) if HOMEBREW_BOTTLES_EXTNAME_REGEX.match?(ref)
end

Instance Method Details

#get_formula(spec, force_bottle: false, flags: [], ignore_errors: false) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
# File 'formulary.rb', line 575

def get_formula(spec, force_bottle: false, flags: [], ignore_errors: false, **)
  formula = begin
    contents = Utils::Bottles.formula_contents(@bottle_filename, name:)
    Formulary.from_contents(name, path, contents, spec, force_bottle:,
                            flags:, ignore_errors:)
  rescue FormulaUnreadableError => e
    opoo <<~EOS
      Unreadable formula in #{@bottle_filename}:
      #{e}
    EOS
    super
  rescue BottleFormulaUnavailableError => e
    opoo <<~EOS
      #{e}
      Falling back to non-bottle formula.
    EOS
    super
  end
  formula.local_bottle_path = @bottle_filename
  formula
end