Module: Homebrew::Bundle::Installer Private

Extended by:
Utils::Output::Mixin
Defined in:
bundle/installer.rb

This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.

Defined Under Namespace

Classes: InstallableEntry

Class Method Summary collapse

Methods included from Utils::Output::Mixin

issue_reporting_message, odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, opoo_without_github_actions_annotation, pretty_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_uninstalled, pretty_upgradable

Class Method Details

.fetchable_formulae_and_casks(entries, no_upgrade:) ⇒ Array<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.

Parameters:

Returns:



153
154
155
156
157
158
159
160
161
# File 'bundle/installer.rb', line 153

def self.fetchable_formulae_and_casks(entries, no_upgrade:)
  installed_taps = Tap.installed_taps

  entries.filter_map do |entry|
    next if tap_dependencies(entry, entries:, installed_taps:).present?

    entry.cls.fetchable_name(entry.name, entry.options, no_upgrade:)
  end
end

.install!(entries, global: false, file: nil, no_lock: false, no_upgrade: false, verbose: false, force: false, jobs: 1, quiet: false) ⇒ Boolean

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:

  • entries (Array<Dsl::Entry>)
  • global (Boolean) (defaults to: false)
  • file (String, nil) (defaults to: nil)
  • no_lock (Boolean) (defaults to: false)
  • no_upgrade (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)
  • force (Boolean) (defaults to: false)
  • jobs (Integer) (defaults to: 1)
  • quiet (Boolean) (defaults to: false)

Returns:

  • (Boolean)


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'bundle/installer.rb', line 51

def self.install!(entries, global: false, file: nil, no_lock: false, no_upgrade: false, verbose: false,
                  force: false, jobs: 1, quiet: false)
  success = 0
  failure = 0

  installable_entries = entries.filter_map do |entry|
    next if Homebrew::Bundle::Skipper.skip? entry

    name = entry.name
    options = entry.options
    type = entry.type
    cls = Homebrew::Bundle.installable(type)
    next if cls.nil? || !cls.install_supported?

    InstallableEntry.new(name:, options:, verb: cls.install_verb(name, options), cls:)
  end

  apply_trust!(installable_entries)

  if (fetchable_names = fetchable_formulae_and_casks(installable_entries, no_upgrade:).presence)
    fetchable_names_joined = fetchable_names.join(", ")
    puts Formatter.success("Fetching #{fetchable_names_joined}") unless quiet
    unless Bundle.brew("fetch", *fetchable_names, verbose:)
      $stderr.puts Formatter.error "`brew bundle` failed! Failed to fetch #{fetchable_names_joined}"
      return false
    end
  end

  if jobs > 1 && installable_entries.size > 1
    require "bundle/parallel_installer"

    parallel = ParallelInstaller.new(
      installable_entries, jobs:, no_upgrade:, verbose:, force:, quiet:
    )
    parallel_success, parallel_failure = parallel.run!
    success += parallel_success
    failure += parallel_failure
  else
    installable_entries.each do |entry|
      if install_entry!(entry, no_upgrade:, verbose:, force:, quiet:)
        success += 1
      else
        failure += 1
      end
    end
  end

  unless failure.zero?
    require "utils"
    dependency = Utils.pluralize("dependency", failure)
    $stderr.puts Formatter.error "`brew bundle` failed! #{failure} Brewfile #{dependency} failed to install"
    return false
  end

  unless quiet
    require "utils"
    dependency = Utils.pluralize("dependency", success)
    puts Formatter.success "`brew bundle` complete! #{success} Brewfile #{dependency} now installed."
  end

  true
end

.reset!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.

This method returns an undefined value.



32
33
34
35
36
# File 'bundle/installer.rb', line 32

def self.reset!
  Homebrew::Bundle.reset!
  Homebrew::Bundle::Cask.reset!
  Homebrew::Bundle::Tap.reset!
end

.tap_dependencies(entry, entries:, installed_taps:) ⇒ Array<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.

Parameters:

Returns:



170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'bundle/installer.rb', line 170

def self.tap_dependencies(entry, entries:, installed_taps:)
  return [] unless [Brew, Cask].include?(entry.cls)

  if (tap_name = entry.tap_name)
    return installed_taps.exclude?(tap_name) ? [tap_name] : []
  end

  tap_names = entries.filter_map do |tap_entry|
    tap_entry.name if tap_entry.cls == Tap && installed_taps.exclude?(tap_entry.name)
  end
  return [] if tap_names.empty?
  return [] unless unavailable_without_tap?(entry)

  tap_names
end