Class: Formulary::TapLoader

Inherits:
FormulaLoader show all
Defined in:
brew/Library/Homebrew/formulary.rb

Overview

Loads tapped formulae.

Instance Attribute Summary collapse

Attributes inherited from FormulaLoader

#alias_path, #name, #path

Instance Method Summary collapse

Methods inherited from FormulaLoader

#klass

Constructor Details

#initialize(tapped_name, from: nil) ⇒ TapLoader

Returns a new instance of TapLoader



223
224
225
226
227
# File 'brew/Library/Homebrew/formulary.rb', line 223

def initialize(tapped_name, from: nil)
  warn = ![:keg, :rack].include?(from)
  name, path = formula_name_path(tapped_name, warn: warn)
  super name, path
end

Instance Attribute Details

#tapObject (readonly)

Returns the value of attribute tap



221
222
223
# File 'brew/Library/Homebrew/formulary.rb', line 221

def tap
  @tap
end

Instance Method Details

#formula_name_path(tapped_name, warn: true) ⇒ Object



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
# File 'brew/Library/Homebrew/formulary.rb', line 229

def formula_name_path(tapped_name, warn: true)
  user, repo, name = tapped_name.split("/", 3).map(&:downcase)
  @tap = Tap.fetch user, repo
  formula_dir = @tap.formula_dir || @tap.path
  path = formula_dir/"#{name}.rb"

  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]) &&
          (new_path = formula_dir/"#{new_name}.rb").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])
      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.install unless new_tap.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 "Use #{new_name} instead of deprecated #{old_name}" if warn && old_name && new_name
  end

  [name, path]
end

#get_formula(spec, alias_path: nil) ⇒ Object



262
263
264
265
266
267
268
269
270
# File 'brew/Library/Homebrew/formulary.rb', line 262

def get_formula(spec, alias_path: nil)
  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_fileObject



272
273
274
275
276
277
# File 'brew/Library/Homebrew/formulary.rb', line 272

def load_file
  super
rescue MethodDeprecatedError => e
  e.issues_url = tap.issues_url || tap.to_s
  raise
end