Class: Formulary::TapLoader

Inherits:
FormulaLoader show all
Defined in:
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



187
188
189
190
191
# File 'Library/Homebrew/formulary.rb', line 187

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



185
186
187
# File 'Library/Homebrew/formulary.rb', line 185

def tap
  @tap
end

Instance Method Details

#formula_name_path(tapped_name, warn: true) ⇒ Object



193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# File 'Library/Homebrew/formulary.rb', line 193

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

    if warn && old_name && new_name
      opoo "Use #{new_name} instead of deprecated #{old_name}"
    end
  end

  [name, path]
end

#get_formula(spec, alias_path: nil) ⇒ Object



228
229
230
231
232
233
234
235
236
# File 'Library/Homebrew/formulary.rb', line 228

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



238
239
240
241
242
243
# File 'Library/Homebrew/formulary.rb', line 238

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