Class: Formulary::TapLoader 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 tapped formulae.

Instance Attribute Summary

Attributes inherited from FormulaLoader

#alias_path, #name, #path, #tap

Instance Method Summary collapse

Methods inherited from FormulaLoader

#klass

Methods included from Context

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

Constructor Details

#initialize(tapped_name, from:, warn:) ⇒ TapLoader

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 TapLoader.



607
608
609
610
# File 'formulary.rb', line 607

def initialize(tapped_name, from:, warn:)
  name, path, tap = formula_name_path(tapped_name, warn: warn)
  super name, path, tap: tap
end

Instance Method Details

#formula_name_path(tapped_name, warn:) ⇒ 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.



612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
# File 'formulary.rb', line 612

def formula_name_path(tapped_name, warn:)
  user, repo, name = tapped_name.split("/", 3).map(&:downcase)
  tap = Tap.fetch user, repo
  path = find_formula_from_name(name, tap)

  unless path.file?
    if (possible_alias = tap.alias_dir/name).file?
      path = possible_alias.resolved_path
      name = path.basename(".rb").to_s
    elsif (new_name = tap.formula_renames[name].presence) &&
          (new_path = find_formula_from_name(new_name, tap)).file?
      old_name = name
      path = new_path
      name = new_name
      new_name = tap.core_tap? ? name : "#{tap}/#{name}"
    elsif (new_tap_name = tap.tap_migrations[name].presence)
      new_tap_user, new_tap_repo, = new_tap_name.split("/")
      new_tap_name = "#{new_tap_user}/#{new_tap_repo}"
      new_tap = Tap.fetch new_tap_name
      new_tap.ensure_installed!
      new_tapped_name = "#{new_tap_name}/#{name}"
      name, path = formula_name_path(new_tapped_name, warn: false)
      old_name = tapped_name
      new_name = new_tap.core_tap? ? name : new_tapped_name
    end

    opoo "Formula #{old_name} was renamed to #{new_name}." if warn && old_name && new_name
  end

  [name, path, tap]
end

#get_formula(spec, alias_path: nil, 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.



644
645
646
647
648
649
650
651
652
# File 'formulary.rb', line 644

def get_formula(spec, alias_path: nil, force_bottle: false, flags: [], ignore_errors: false)
  super
rescue FormulaUnreadableError => e
  raise TapFormulaUnreadableError.new(tap, name, e.formula_error), "", e.backtrace
rescue FormulaClassUnavailableError => e
  raise TapFormulaClassUnavailableError.new(tap, name, e.path, e.class_name, e.class_list), "", e.backtrace
rescue FormulaUnavailableError => e
  raise TapFormulaUnavailableError.new(tap, name), "", e.backtrace
end

#load_file(flags:, ignore_errors:) ⇒ 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.



654
655
656
657
658
659
# File 'formulary.rb', line 654

def load_file(flags:, ignore_errors:)
  super
rescue MethodDeprecatedError => e
  e.issues_url = tap.issues_url || tap.to_s
  raise
end