Class: Formulary::FromBottleLoader Private

Inherits:
FormulaLoader show all
Includes:
Utils::Output::Mixin
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 included from Utils::Output::Mixin

#odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #opoo_outside_github_actions, #pretty_deprecated, #pretty_disabled, #pretty_duration, #pretty_installed, #pretty_outdated, #pretty_uninstalled

Methods inherited from FormulaLoader

#klass

Methods included from Context

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

Constructor Details

#initialize(bottle_name, warn: false) ⇒ void

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:

  • bottle_name (String)
  • warn (Boolean) (defaults to: false)


501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
# File 'formulary.rb', line 501

def initialize(bottle_name, warn: false)
  @bottle_path = T.let(Pathname(bottle_name).realpath, Pathname)
  name, full_name = Utils::Bottles.resolve_formula_names(@bottle_path)
  tap, = Tap.with_formula_name(full_name)

  # We might not have tap information with --only-json-tab bottles.
  # In this scenario we make a best effort guess, assuming Homebrew/core
  # unless we find it in another tap we have installed.
  fallback_path = Formulary.path(full_name)
  tap ||= Tap.from_path(fallback_path)

  # Mimic a Cellar path to simulate relaxed deprecation behaviour shared with postinstalls.
  version = Utils::Bottles.resolve_version(@bottle_path)
  @cellar_formula_path = T.let(HOMEBREW_CELLAR/name/version/".brew"/"#{name}.rb", Pathname)

  super name, fallback_path, tap:
end

Class Method Details

.try_new(ref, from: 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, nil) (defaults to: nil)
  • warn (Boolean) (defaults to: false)

Returns:

  • (T.attached_class, nil)


492
493
494
495
496
497
498
# File 'formulary.rb', line 492

def self.try_new(ref, from: nil, warn: false)
  return if Homebrew::EnvConfig.forbid_packages_from_paths?

  ref = ref.to_s

  new(ref) if HOMEBREW_BOTTLES_EXTNAME_REGEX.match?(ref) && File.exist?(ref)
end

Instance Method Details

#get_formula(spec, alias_path: nil, force_bottle: false, flags: [], ignore_errors: false) ⇒ Formula

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:

  • spec (Symbol)
  • alias_path (Pathname, String, nil) (defaults to: nil)
  • force_bottle (Boolean) (defaults to: false)
  • flags (Array<String>) (defaults to: [])
  • ignore_errors (Boolean) (defaults to: false)

Returns:



528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
# File 'formulary.rb', line 528

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