2025-03-18 17:38:37 +00:00
|
|
|
# typed: true # rubocop:todo Sorbet/StrictSigil
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Homebrew
|
|
|
|
module Bundle
|
|
|
|
module Installer
|
|
|
|
module_function
|
|
|
|
|
|
|
|
def install(entries, global: false, file: nil, no_lock: false, no_upgrade: false, verbose: false, force: false,
|
|
|
|
quiet: false)
|
|
|
|
success = 0
|
|
|
|
failure = 0
|
|
|
|
|
|
|
|
entries.each do |entry|
|
|
|
|
name = entry.name
|
|
|
|
args = [name]
|
|
|
|
options = {}
|
|
|
|
verb = "Installing"
|
|
|
|
type = entry.type
|
|
|
|
cls = case type
|
|
|
|
when :brew
|
|
|
|
options = entry.options
|
|
|
|
verb = "Upgrading" if Homebrew::Bundle::BrewInstaller.formula_upgradable?(name)
|
|
|
|
Homebrew::Bundle::BrewInstaller
|
|
|
|
when :cask
|
|
|
|
options = entry.options
|
|
|
|
verb = "Upgrading" if Homebrew::Bundle::CaskInstaller.cask_upgradable?(name)
|
|
|
|
Homebrew::Bundle::CaskInstaller
|
|
|
|
when :mas
|
|
|
|
args << entry.options[:id]
|
|
|
|
Homebrew::Bundle::MacAppStoreInstaller
|
|
|
|
when :whalebrew
|
|
|
|
Homebrew::Bundle::WhalebrewInstaller
|
|
|
|
when :vscode
|
|
|
|
Homebrew::Bundle::VscodeExtensionInstaller
|
|
|
|
when :tap
|
|
|
|
verb = "Tapping"
|
|
|
|
options = entry.options
|
|
|
|
Homebrew::Bundle::TapInstaller
|
|
|
|
end
|
|
|
|
|
|
|
|
next if cls.nil?
|
|
|
|
next if Homebrew::Bundle::Skipper.skip? entry
|
|
|
|
|
|
|
|
preinstall = if cls.preinstall(*args, **options, no_upgrade:, verbose:)
|
|
|
|
puts Formatter.success("#{verb} #{name}")
|
|
|
|
true
|
|
|
|
else
|
|
|
|
puts "Using #{name}" unless quiet
|
|
|
|
false
|
|
|
|
end
|
|
|
|
|
|
|
|
if cls.install(*args, **options,
|
|
|
|
preinstall:, no_upgrade:, verbose:, force:)
|
|
|
|
success += 1
|
|
|
|
else
|
|
|
|
$stderr.puts Formatter.error("#{verb} #{name} has failed!")
|
|
|
|
failure += 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
unless failure.zero?
|
|
|
|
dependency = Homebrew::Bundle::Dsl.pluralize_dependency(failure)
|
2025-03-19 09:51:39 +00:00
|
|
|
$stderr.puts Formatter.error "`brew bundle` failed! #{failure} Brewfile #{dependency} failed to install"
|
2025-03-18 17:38:37 +00:00
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
|
|
|
unless quiet
|
|
|
|
dependency = Homebrew::Bundle::Dsl.pluralize_dependency(success)
|
2025-03-19 09:51:39 +00:00
|
|
|
puts Formatter.success "`brew bundle` complete! #{success} Brewfile #{dependency} now installed."
|
2025-03-18 17:38:37 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|