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, pretty_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_outdated, 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:



118
119
120
121
122
123
124
125
126
# File 'bundle/installer.rb', line 118

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
# 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

  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:



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'bundle/installer.rb', line 135

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