Class: Homebrew::CLI::NamedArgs Private

Inherits:
Array
  • Object
show all
Extended by:
T::Sig
Defined in:
cli/named_args.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.

Helper class for loading formulae/casks from named arguments.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args, parent: Args.new, override_spec: nil, force_bottle: false, flags: [], cask_options: false) ⇒ NamedArgs

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



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'cli/named_args.rb', line 16

def initialize(*args, parent: Args.new, override_spec: nil, force_bottle: false, flags: [], cask_options: false)
  require "cask/cask"
  require "cask/cask_loader"
  require "formulary"
  require "keg"
  require "missing_formula"

  @args = args
  @override_spec = override_spec
  @force_bottle = force_bottle
  @flags = flags
  @cask_options = cask_options
  @parent = parent

  super(@args)
end

Instance Attribute Details

#parentObject (readonly)

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.



33
34
35
# File 'cli/named_args.rb', line 33

def parent
  @parent
end

Instance Method Details

#homebrew_tap_cask_namesArray<String>

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:



286
287
288
# File 'cli/named_args.rb', line 286

def homebrew_tap_cask_names
  downcased_unique_named.grep(HOMEBREW_CASK_TAP_CASK_REGEX)
end

#to_casksObject

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.



35
36
37
# File 'cli/named_args.rb', line 35

def to_casks
  @to_casks ||= to_formulae_and_casks(only: :cask).freeze
end

#to_default_kegsArray<Keg>

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:



225
226
227
228
229
230
231
232
233
234
# File 'cli/named_args.rb', line 225

def to_default_kegs
  @to_default_kegs ||= begin
    to_formulae_and_casks(only: :formula, method: :default_kegs).freeze
  rescue NoSuchKegError => e
    if (reason = MissingFormula.suggest_command(e.name, "uninstall"))
      $stderr.puts reason
    end
    raise e
  end
end

#to_formulaeObject

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.



39
40
41
# File 'cli/named_args.rb', line 39

def to_formulae
  @to_formulae ||= to_formulae_and_casks(only: :formula).freeze
end

#to_formulae_and_casks(only: parent&.only_formula_or_cask, ignore_unavailable: nil, method: nil, uniq: true, prefer_loading_from_api: false) ⇒ Array<Formula, Keg, Cask::Cask>

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.

Convert named arguments to Formula or Cask objects. If both a formula and cask with the same name exist, returns the formula and prints a warning unless only is specified.

Parameters:

  • only (Symbol, nil) (defaults to: parent&.only_formula_or_cask)
  • ignore_unavailable (Boolean, nil) (defaults to: nil)
  • method (Symbol, nil) (defaults to: nil)
  • uniq (Boolean) (defaults to: true)
  • prefer_loading_from_api (Boolean) (defaults to: false)

Returns:



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'cli/named_args.rb', line 55

def to_formulae_and_casks(only: parent&.only_formula_or_cask, ignore_unavailable: nil, method: nil, uniq: true,
                          prefer_loading_from_api: false)
  @to_formulae_and_casks ||= {}
  @to_formulae_and_casks[only] ||= downcased_unique_named.flat_map do |name|
    load_formula_or_cask(name, only: only, method: method, prefer_loading_from_api: prefer_loading_from_api)
  rescue FormulaUnreadableError, FormulaClassUnavailableError,
         TapFormulaUnreadableError, TapFormulaClassUnavailableError,
         Cask::CaskUnreadableError
    # Need to rescue before `*UnavailableError` (superclass of this)
    # The formula/cask was found, but there's a problem with its implementation
    raise
  rescue NoSuchKegError, FormulaUnavailableError, Cask::CaskUnavailableError, FormulaOrCaskUnavailableError
    ignore_unavailable ? [] : raise
  end.freeze

  if uniq
    @to_formulae_and_casks[only].uniq.freeze
  else
    @to_formulae_and_casks[only]
  end
end

#to_formulae_and_casks_and_unavailable(only: parent&.only_formula_or_cask, method: nil) ⇒ 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.



84
85
86
87
88
89
90
91
# File 'cli/named_args.rb', line 84

def to_formulae_and_casks_and_unavailable(only: parent&.only_formula_or_cask, method: nil)
  @to_formulae_casks_unknowns ||= {}
  @to_formulae_casks_unknowns[method] = downcased_unique_named.map do |name|
    load_formula_or_cask(name, only: only, method: method)
  rescue FormulaOrCaskUnavailableError => e
    e
  end.uniq.freeze
end

#to_formulae_to_casks(only: parent&.only_formula_or_cask, method: nil) ⇒ 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.



77
78
79
80
81
82
# File 'cli/named_args.rb', line 77

def to_formulae_to_casks(only: parent&.only_formula_or_cask, method: nil)
  @to_formulae_to_casks ||= {}
  @to_formulae_to_casks[[method, only]] = to_formulae_and_casks(only: only, method: method)
                                          .partition { |o| o.is_a?(Formula) || o.is_a?(Keg) }
                                          .map(&:freeze).freeze
end

#to_installed_tapsArray<Tap>

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:



279
280
281
282
283
# File 'cli/named_args.rb', line 279

def to_installed_taps
  @to_installed_taps ||= to_taps.each do |tap|
    raise TapUnavailableError, tap.name unless tap.installed?
  end.uniq.freeze
end

#to_kegsArray<Keg>

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:



249
250
251
252
253
254
255
256
257
258
# File 'cli/named_args.rb', line 249

def to_kegs
  @to_kegs ||= begin
    to_formulae_and_casks(only: :formula, method: :kegs).freeze
  rescue NoSuchKegError => e
    if (reason = MissingFormula.suggest_command(e.name, "uninstall"))
      $stderr.puts reason
    end
    raise e
  end
end

#to_kegs_to_casks(only: parent&.only_formula_or_cask, ignore_unavailable: nil, all_kegs: nil) ⇒ Array(Array<Keg>, Array<Cask::Cask>)

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:

  • only (Symbol, nil) (defaults to: parent&.only_formula_or_cask)
  • ignore_unavailable (Boolean, nil) (defaults to: nil)
  • all_kegs (Boolean, nil) (defaults to: nil)

Returns:



264
265
266
267
268
269
270
271
# File 'cli/named_args.rb', line 264

def to_kegs_to_casks(only: parent&.only_formula_or_cask, ignore_unavailable: nil, all_kegs: nil)
  method = all_kegs ? :kegs : :default_kegs
  @to_kegs_to_casks ||= {}
  @to_kegs_to_casks[method] ||=
    to_formulae_and_casks(only: only, ignore_unavailable: ignore_unavailable, method: method)
    .partition { |o| o.is_a?(Keg) }
    .map(&:freeze).freeze
end

#to_latest_kegsArray<Keg>

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:



237
238
239
240
241
242
243
244
245
246
# File 'cli/named_args.rb', line 237

def to_latest_kegs
  @to_latest_kegs ||= begin
    to_formulae_and_casks(only: :formula, method: :latest_kegs).freeze
  rescue NoSuchKegError => e
    if (reason = MissingFormula.suggest_command(e.name, "uninstall"))
      $stderr.puts reason
    end
    raise e
  end
end

#to_paths(only: parent&.only_formula_or_cask, recurse_tap: false) ⇒ Array<Pathname>

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.

Keep existing paths and try to convert others to tap, formula or cask paths. If a cask and formula with the same name exist, includes both their paths unless only is specified.

Parameters:

  • only (Symbol, nil) (defaults to: parent&.only_formula_or_cask)
  • recurse_tap (Boolean) (defaults to: false)

Returns:



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
# File 'cli/named_args.rb', line 193

def to_paths(only: parent&.only_formula_or_cask, recurse_tap: false)
  @to_paths ||= {}
  @to_paths[only] ||= downcased_unique_named.flat_map do |name|
    if File.exist?(name)
      Pathname(name)
    elsif name.count("/") == 1 && !name.start_with?("./", "/")
      tap = Tap.fetch(name)

      if recurse_tap
        next tap.formula_files if only == :formula
        next tap.cask_files if only == :cask
      end

      tap.path
    else
      next Formulary.path(name) if only == :formula
      next Cask::CaskLoader.path(name) if only == :cask

      formula_path = Formulary.path(name)
      cask_path = Cask::CaskLoader.path(name)

      paths = []

      paths << formula_path if formula_path.exist?
      paths << cask_path if cask_path.exist?

      paths.empty? ? Pathname(name) : paths
    end
  end.uniq.freeze
end

#to_resolved_formulae(uniq: true) ⇒ Array<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:

  • uniq (Boolean) (defaults to: true)

Returns:



180
181
182
183
# File 'cli/named_args.rb', line 180

def to_resolved_formulae(uniq: true)
  @to_resolved_formulae ||= to_formulae_and_casks(only: :formula, method: :resolve, uniq: uniq)
                            .freeze
end

#to_resolved_formulae_to_casks(only: parent&.only_formula_or_cask) ⇒ 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.



185
186
187
# File 'cli/named_args.rb', line 185

def to_resolved_formulae_to_casks(only: parent&.only_formula_or_cask)
  to_formulae_to_casks(only: only, method: :resolve)
end

#to_tapsArray<Tap>

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:



274
275
276
# File 'cli/named_args.rb', line 274

def to_taps
  @to_taps ||= downcased_unique_named.map { |name| Tap.fetch name }.uniq.freeze
end