mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Merge pull request #19568 from Homebrew/bundle-lazy-require
bundle: `require` more lazily
This commit is contained in:
commit
09eceba798
@ -1,40 +1,89 @@
|
||||
# typed: strict
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/brewfile"
|
||||
require "bundle/bundle"
|
||||
require "bundle/dsl"
|
||||
require "bundle/adder"
|
||||
require "bundle/checker"
|
||||
require "bundle/remover"
|
||||
require "bundle/skipper"
|
||||
require "bundle/brew_services"
|
||||
require "bundle/brew_service_checker"
|
||||
require "bundle/brew_installer"
|
||||
require "bundle/brew_checker"
|
||||
require "bundle/cask_installer"
|
||||
require "bundle/mac_app_store_installer"
|
||||
require "bundle/mac_app_store_checker"
|
||||
require "bundle/tap_installer"
|
||||
require "bundle/brew_dumper"
|
||||
require "bundle/cask_dumper"
|
||||
require "bundle/cask_checker"
|
||||
require "bundle/mac_app_store_dumper"
|
||||
require "bundle/tap_dumper"
|
||||
require "bundle/tap_checker"
|
||||
require "bundle/dumper"
|
||||
require "bundle/installer"
|
||||
require "bundle/lister"
|
||||
require "bundle/commands/install"
|
||||
require "bundle/commands/dump"
|
||||
require "bundle/commands/cleanup"
|
||||
require "bundle/commands/check"
|
||||
require "bundle/commands/exec"
|
||||
require "bundle/commands/list"
|
||||
require "bundle/commands/add"
|
||||
require "bundle/commands/remove"
|
||||
require "bundle/whalebrew_installer"
|
||||
require "bundle/whalebrew_dumper"
|
||||
require "bundle/vscode_extension_checker"
|
||||
require "bundle/vscode_extension_dumper"
|
||||
require "bundle/vscode_extension_installer"
|
||||
require "English"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
class << self
|
||||
def system(cmd, *args, verbose: false)
|
||||
return super cmd, *args if verbose
|
||||
|
||||
logs = []
|
||||
success = T.let(nil, T.nilable(T::Boolean))
|
||||
IO.popen([cmd, *args], err: [:child, :out]) do |pipe|
|
||||
while (buf = pipe.gets)
|
||||
logs << buf
|
||||
end
|
||||
Process.wait(pipe.pid)
|
||||
success = $CHILD_STATUS.success?
|
||||
pipe.close
|
||||
end
|
||||
puts logs.join unless success
|
||||
success
|
||||
end
|
||||
|
||||
def brew(*args, verbose: false)
|
||||
system(HOMEBREW_BREW_FILE, *args, verbose:)
|
||||
end
|
||||
|
||||
def mas_installed?
|
||||
@mas_installed ||= which_formula("mas")
|
||||
end
|
||||
|
||||
def vscode_installed?
|
||||
@vscode_installed ||= which_vscode.present?
|
||||
end
|
||||
|
||||
def which_vscode
|
||||
@which_vscode ||= which("code", ORIGINAL_PATHS)
|
||||
@which_vscode ||= which("codium", ORIGINAL_PATHS)
|
||||
@which_vscode ||= which("cursor", ORIGINAL_PATHS)
|
||||
@which_vscode ||= which("code-insiders", ORIGINAL_PATHS)
|
||||
end
|
||||
|
||||
def whalebrew_installed?
|
||||
@whalebrew_installed ||= which_formula("whalebrew")
|
||||
end
|
||||
|
||||
def cask_installed?
|
||||
@cask_installed ||= File.directory?("#{HOMEBREW_PREFIX}/Caskroom") &&
|
||||
(File.directory?("#{HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-cask") ||
|
||||
!Homebrew::EnvConfig.no_install_from_api?)
|
||||
end
|
||||
|
||||
def which_formula(name)
|
||||
formula = Formulary.factory(name)
|
||||
ENV["PATH"] = "#{formula.opt_bin}:#{ENV.fetch("PATH", nil)}" if formula.any_version_installed?
|
||||
which(name).present?
|
||||
end
|
||||
|
||||
def exchange_uid_if_needed!(&block)
|
||||
euid = Process.euid
|
||||
uid = Process.uid
|
||||
return yield if euid == uid
|
||||
|
||||
old_euid = euid
|
||||
process_reexchangeable = Process::UID.re_exchangeable?
|
||||
if process_reexchangeable
|
||||
Process::UID.re_exchange
|
||||
else
|
||||
Process::Sys.seteuid(uid)
|
||||
end
|
||||
|
||||
home = T.must(Etc.getpwuid(Process.uid)).dir
|
||||
return_value = with_env("HOME" => home, &block)
|
||||
|
||||
if process_reexchangeable
|
||||
Process::UID.re_exchange
|
||||
else
|
||||
Process::Sys.seteuid(old_euid)
|
||||
end
|
||||
|
||||
return_value
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
require "extend/os/bundle/bundle"
|
||||
|
@ -1,6 +1,9 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/brewfile"
|
||||
require "bundle/dumper"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Adder
|
||||
|
@ -1,6 +1,8 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/brew_installer"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Checker
|
||||
|
@ -11,6 +11,8 @@ module Homebrew
|
||||
module_function
|
||||
|
||||
def reset!
|
||||
require "bundle/brew_services"
|
||||
|
||||
Homebrew::Bundle::BrewServices.reset!
|
||||
@formulae = nil
|
||||
@formulae_by_full_name = nil
|
||||
@ -54,6 +56,8 @@ module Homebrew
|
||||
end
|
||||
|
||||
def dump(describe: false, no_restart: false)
|
||||
require "bundle/brew_services"
|
||||
|
||||
requested_formula = formulae.select do |f|
|
||||
f[:installed_on_request?] || !f[:installed_as_dependency?]
|
||||
end
|
||||
|
@ -77,6 +77,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def start_service_needed?
|
||||
require "bundle/brew_services"
|
||||
start_service? && !BrewServices.started?(@full_name)
|
||||
end
|
||||
|
||||
@ -96,6 +97,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def service_change_state!(verbose:)
|
||||
require "bundle/brew_services"
|
||||
if restart_service_needed?
|
||||
puts "Restarting #{@name} service." if verbose
|
||||
BrewServices.restart(@full_name, verbose:)
|
||||
@ -156,6 +158,7 @@ module Homebrew
|
||||
return true if array.include?(formula)
|
||||
return true if array.include?(formula.split("/").last)
|
||||
|
||||
require "bundle/brew_dumper"
|
||||
old_names = Homebrew::Bundle::BrewDumper.formula_oldnames
|
||||
old_name = old_names[formula]
|
||||
old_name ||= old_names[formula.split("/").last]
|
||||
@ -195,6 +198,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.formulae
|
||||
require "bundle/brew_dumper"
|
||||
Homebrew::Bundle::BrewDumper.formulae
|
||||
end
|
||||
|
||||
@ -225,6 +229,7 @@ module Homebrew
|
||||
conflicts_with = Set.new
|
||||
conflicts_with += @conflicts_with_arg
|
||||
|
||||
require "bundle/brew_dumper"
|
||||
if (formula = Homebrew::Bundle::BrewDumper.formulae_by_full_name(@full_name)) &&
|
||||
(formula_conflicts_with = formula[:conflicts_with])
|
||||
conflicts_with += formula_conflicts_with
|
||||
@ -246,10 +251,11 @@ module Homebrew
|
||||
end
|
||||
return false unless Bundle.brew("unlink", conflict, verbose:)
|
||||
|
||||
if restart_service?
|
||||
puts "Stopping #{conflict} service (if it is running)." if verbose
|
||||
BrewServices.stop(conflict, verbose:)
|
||||
end
|
||||
next unless restart_service?
|
||||
|
||||
require "bundle/brew_services"
|
||||
puts "Stopping #{conflict} service (if it is running)." if verbose
|
||||
BrewServices.stop(conflict, verbose:)
|
||||
end
|
||||
|
||||
true
|
||||
|
@ -24,6 +24,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def entry_to_formula(entry)
|
||||
require "bundle/brew_installer"
|
||||
Homebrew::Bundle::BrewInstaller.new(entry.name, entry.options)
|
||||
end
|
||||
|
||||
@ -32,10 +33,12 @@ module Homebrew
|
||||
end
|
||||
|
||||
def service_is_started?(service_name)
|
||||
require "bundle/brew_services"
|
||||
Homebrew::Bundle::BrewServices.started?(service_name)
|
||||
end
|
||||
|
||||
def lookup_old_name(service_name)
|
||||
require "bundle/brew_dumper"
|
||||
@old_names ||= Homebrew::Bundle::BrewDumper.formula_oldnames
|
||||
old_name = @old_names[service_name]
|
||||
old_name ||= @old_names[service_name.split("/").last]
|
||||
|
@ -1,6 +1,8 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/dsl"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Brewfile
|
||||
|
@ -1,89 +0,0 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "English"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
class << self
|
||||
def system(cmd, *args, verbose: false)
|
||||
return super cmd, *args if verbose
|
||||
|
||||
logs = []
|
||||
success = T.let(nil, T.nilable(T::Boolean))
|
||||
IO.popen([cmd, *args], err: [:child, :out]) do |pipe|
|
||||
while (buf = pipe.gets)
|
||||
logs << buf
|
||||
end
|
||||
Process.wait(pipe.pid)
|
||||
success = $CHILD_STATUS.success?
|
||||
pipe.close
|
||||
end
|
||||
puts logs.join unless success
|
||||
success
|
||||
end
|
||||
|
||||
def brew(*args, verbose: false)
|
||||
system(HOMEBREW_BREW_FILE, *args, verbose:)
|
||||
end
|
||||
|
||||
def mas_installed?
|
||||
@mas_installed ||= which_formula("mas")
|
||||
end
|
||||
|
||||
def vscode_installed?
|
||||
@vscode_installed ||= which_vscode.present?
|
||||
end
|
||||
|
||||
def which_vscode
|
||||
@which_vscode ||= which("code", ORIGINAL_PATHS)
|
||||
@which_vscode ||= which("codium", ORIGINAL_PATHS)
|
||||
@which_vscode ||= which("cursor", ORIGINAL_PATHS)
|
||||
@which_vscode ||= which("code-insiders", ORIGINAL_PATHS)
|
||||
end
|
||||
|
||||
def whalebrew_installed?
|
||||
@whalebrew_installed ||= which_formula("whalebrew")
|
||||
end
|
||||
|
||||
def cask_installed?
|
||||
@cask_installed ||= File.directory?("#{HOMEBREW_PREFIX}/Caskroom") &&
|
||||
(File.directory?("#{HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-cask") ||
|
||||
!Homebrew::EnvConfig.no_install_from_api?)
|
||||
end
|
||||
|
||||
def which_formula(name)
|
||||
formula = Formulary.factory(name)
|
||||
ENV["PATH"] = "#{formula.opt_bin}:#{ENV.fetch("PATH", nil)}" if formula.any_version_installed?
|
||||
which(name).present?
|
||||
end
|
||||
|
||||
def exchange_uid_if_needed!(&block)
|
||||
euid = Process.euid
|
||||
uid = Process.uid
|
||||
return yield if euid == uid
|
||||
|
||||
old_euid = euid
|
||||
process_reexchangeable = Process::UID.re_exchangeable?
|
||||
if process_reexchangeable
|
||||
Process::UID.re_exchange
|
||||
else
|
||||
Process::Sys.seteuid(uid)
|
||||
end
|
||||
|
||||
home = T.must(Etc.getpwuid(Process.uid)).dir
|
||||
return_value = with_env("HOME" => home, &block)
|
||||
|
||||
if process_reexchangeable
|
||||
Process::UID.re_exchange
|
||||
else
|
||||
Process::Sys.seteuid(old_euid)
|
||||
end
|
||||
|
||||
return_value
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
require "extend/os/bundle/bundle"
|
@ -1,6 +1,8 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/cask_installer"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Checker
|
||||
|
@ -14,6 +14,7 @@ module Homebrew
|
||||
return true if outdated_casks.include?(name)
|
||||
return false unless options[:greedy]
|
||||
|
||||
require "bundle/cask_dumper"
|
||||
Homebrew::Bundle::CaskDumper.cask_is_outdated_using_greedy?(name)
|
||||
end
|
||||
|
||||
@ -95,10 +96,12 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.installed_casks
|
||||
require "bundle/cask_dumper"
|
||||
@installed_casks ||= Homebrew::Bundle::CaskDumper.cask_names
|
||||
end
|
||||
|
||||
def self.outdated_casks
|
||||
require "bundle/cask_dumper"
|
||||
@outdated_casks ||= Homebrew::Bundle::CaskDumper.outdated_cask_names
|
||||
end
|
||||
end
|
||||
|
@ -32,6 +32,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def checkable_entries(all_entries)
|
||||
require "bundle/skipper"
|
||||
all_entries.select { |e| e.type == self.class::PACKAGE_TYPE }
|
||||
.reject(&Bundle::Skipper.method(:skip?))
|
||||
end
|
||||
@ -67,6 +68,7 @@ module Homebrew
|
||||
}.freeze
|
||||
|
||||
def self.check(global: false, file: nil, exit_on_first_error: false, no_upgrade: false, verbose: false)
|
||||
require "bundle/brewfile"
|
||||
@dsl ||= Brewfile.read(global:, file:)
|
||||
|
||||
check_method_names = CHECKS.keys
|
||||
@ -88,6 +90,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.casks_to_install(exit_on_first_error: false, no_upgrade: false, verbose: false)
|
||||
require "bundle/cask_checker"
|
||||
Homebrew::Bundle::Checker::CaskChecker.new.find_actionable(
|
||||
@dsl.entries,
|
||||
exit_on_first_error:, no_upgrade:, verbose:,
|
||||
@ -95,6 +98,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.formulae_to_install(exit_on_first_error: false, no_upgrade: false, verbose: false)
|
||||
require "bundle/brew_checker"
|
||||
Homebrew::Bundle::Checker::BrewChecker.new.find_actionable(
|
||||
@dsl.entries,
|
||||
exit_on_first_error:, no_upgrade:, verbose:,
|
||||
@ -102,6 +106,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.taps_to_tap(exit_on_first_error: false, no_upgrade: false, verbose: false)
|
||||
require "bundle/tap_checker"
|
||||
Homebrew::Bundle::Checker::TapChecker.new.find_actionable(
|
||||
@dsl.entries,
|
||||
exit_on_first_error:, no_upgrade:, verbose:,
|
||||
@ -109,6 +114,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.apps_to_install(exit_on_first_error: false, no_upgrade: false, verbose: false)
|
||||
require "bundle/mac_app_store_checker"
|
||||
Homebrew::Bundle::Checker::MacAppStoreChecker.new.find_actionable(
|
||||
@dsl.entries,
|
||||
exit_on_first_error:, no_upgrade:, verbose:,
|
||||
@ -116,6 +122,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.extensions_to_install(exit_on_first_error: false, no_upgrade: false, verbose: false)
|
||||
require "bundle/vscode_extension_checker"
|
||||
Homebrew::Bundle::Checker::VscodeExtensionChecker.new.find_actionable(
|
||||
@dsl.entries,
|
||||
exit_on_first_error:, no_upgrade:, verbose:,
|
||||
@ -123,6 +130,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.formulae_to_start(exit_on_first_error: false, no_upgrade: false, verbose: false)
|
||||
require "bundle/brew_service_checker"
|
||||
Homebrew::Bundle::Checker::BrewServiceChecker.new.find_actionable(
|
||||
@dsl.entries,
|
||||
exit_on_first_error:, no_upgrade:, verbose:,
|
||||
@ -130,6 +138,12 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.reset!
|
||||
require "bundle/cask_dumper"
|
||||
require "bundle/brew_dumper"
|
||||
require "bundle/mac_app_store_dumper"
|
||||
require "bundle/tap_dumper"
|
||||
require "bundle/brew_services"
|
||||
|
||||
@dsl = nil
|
||||
Homebrew::Bundle::CaskDumper.reset!
|
||||
Homebrew::Bundle::BrewDumper.reset!
|
||||
|
@ -1,6 +1,8 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/adder"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Commands
|
||||
|
@ -1,6 +1,8 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/checker"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Commands
|
||||
|
@ -9,6 +9,12 @@ module Homebrew
|
||||
# TODO: refactor into multiple modules
|
||||
module Cleanup
|
||||
def self.reset!
|
||||
require "bundle/cask_dumper"
|
||||
require "bundle/brew_dumper"
|
||||
require "bundle/tap_dumper"
|
||||
require "bundle/vscode_extension_dumper"
|
||||
require "bundle/brew_services"
|
||||
|
||||
@dsl = nil
|
||||
@kept_casks = nil
|
||||
@kept_formulae = nil
|
||||
@ -87,12 +93,15 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.casks_to_uninstall(global: false, file: nil)
|
||||
require "bundle/cask_dumper"
|
||||
Homebrew::Bundle::CaskDumper.cask_names - kept_casks(global:, file:)
|
||||
end
|
||||
|
||||
def self.formulae_to_uninstall(global: false, file: nil)
|
||||
kept_formulae = self.kept_formulae(global:, file:)
|
||||
|
||||
require "bundle/brew_dumper"
|
||||
require "bundle/brew_installer"
|
||||
current_formulae = Homebrew::Bundle::BrewDumper.formulae
|
||||
current_formulae.reject! do |f|
|
||||
Homebrew::Bundle::BrewInstaller.formula_in_array?(f[:full_name], kept_formulae)
|
||||
@ -101,6 +110,10 @@ module Homebrew
|
||||
end
|
||||
|
||||
private_class_method def self.kept_formulae(global: false, file: nil)
|
||||
require "bundle/brewfile"
|
||||
require "bundle/brew_dumper"
|
||||
require "bundle/cask_dumper"
|
||||
|
||||
@kept_formulae ||= begin
|
||||
@dsl ||= Brewfile.read(global:, file:)
|
||||
|
||||
@ -117,6 +130,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
private_class_method def self.kept_casks(global: false, file: nil)
|
||||
require "bundle/brewfile"
|
||||
return @kept_casks if @kept_casks
|
||||
|
||||
@dsl ||= Brewfile.read(global:, file:)
|
||||
@ -152,6 +166,9 @@ module Homebrew
|
||||
IGNORED_TAPS = %w[homebrew/core].freeze
|
||||
|
||||
def self.taps_to_untap(global: false, file: nil)
|
||||
require "bundle/brewfile"
|
||||
require "bundle/tap_dumper"
|
||||
|
||||
@dsl ||= Brewfile.read(global:, file:)
|
||||
kept_formulae = self.kept_formulae(global:, file:).filter_map(&method(:lookup_formula))
|
||||
kept_taps = @dsl.entries.select { |e| e.type == :tap }.map(&:name)
|
||||
@ -168,6 +185,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.vscode_extensions_to_uninstall(global: false, file: nil)
|
||||
require "bundle/brewfile"
|
||||
@dsl ||= Brewfile.read(global:, file:)
|
||||
kept_extensions = @dsl.entries.select { |e| e.type == :vscode }.map { |x| x.name.downcase }
|
||||
|
||||
@ -176,6 +194,7 @@ module Homebrew
|
||||
# find any in the `Brewfile`.
|
||||
return [].freeze if kept_extensions.empty?
|
||||
|
||||
require "bundle/vscode_extension_dumper"
|
||||
current_extensions = Homebrew::Bundle::VscodeExtensionDumper.extensions
|
||||
current_extensions - kept_extensions
|
||||
end
|
||||
|
@ -1,6 +1,8 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/dumper"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Commands
|
||||
|
@ -57,6 +57,7 @@ module Homebrew
|
||||
|
||||
command = args.first
|
||||
|
||||
require "bundle/brewfile"
|
||||
@dsl = Brewfile.read(global:, file:)
|
||||
|
||||
require "formula"
|
||||
|
@ -1,6 +1,9 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/brewfile"
|
||||
require "bundle/installer"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Commands
|
||||
|
@ -1,6 +1,9 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/brewfile"
|
||||
require "bundle/lister"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Commands
|
||||
|
@ -1,6 +1,8 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/remover"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Commands
|
||||
|
@ -14,6 +14,12 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.build_brewfile(describe:, no_restart:, brews:, taps:, casks:, mas:, whalebrew:, vscode:)
|
||||
require "bundle/tap_dumper"
|
||||
require "bundle/cask_dumper"
|
||||
require "bundle/mac_app_store_dumper"
|
||||
require "bundle/whalebrew_dumper"
|
||||
require "bundle/vscode_extension_dumper"
|
||||
|
||||
content = []
|
||||
content << TapDumper.dump if taps
|
||||
content << BrewDumper.dump(describe:, no_restart:) if brews
|
||||
@ -33,6 +39,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.brewfile_path(global: false, file: nil)
|
||||
require "bundle/brewfile"
|
||||
Brewfile.path(dash_writes_to_stdout: true, global:, file:)
|
||||
end
|
||||
|
||||
|
@ -1,6 +1,14 @@
|
||||
# typed: true # rubocop:todo Sorbet/StrictSigil
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle/dsl"
|
||||
require "bundle/brew_installer"
|
||||
require "bundle/cask_installer"
|
||||
require "bundle/mac_app_store_installer"
|
||||
require "bundle/whalebrew_installer"
|
||||
require "bundle/vscode_extension_installer"
|
||||
require "bundle/tap_installer"
|
||||
|
||||
module Homebrew
|
||||
module Bundle
|
||||
module Installer
|
||||
|
@ -61,6 +61,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.installed_app_ids
|
||||
require "bundle/mac_app_store_dumper"
|
||||
@installed_app_ids ||= Homebrew::Bundle::MacAppStoreDumper.app_ids
|
||||
end
|
||||
|
||||
|
@ -5,6 +5,9 @@ module Homebrew
|
||||
module Bundle
|
||||
module Remover
|
||||
def self.remove(*args, type:, global:, file:)
|
||||
require "bundle/brewfile"
|
||||
require "bundle/dumper"
|
||||
|
||||
brewfile = Brewfile.read(global:, file:)
|
||||
content = brewfile.input
|
||||
entry_type = type.to_s if type != :none
|
||||
|
@ -8,6 +8,8 @@ module Homebrew
|
||||
module Skipper
|
||||
class << self
|
||||
def skip?(entry, silent: false)
|
||||
require "bundle/brew_dumper"
|
||||
|
||||
# TODO: use extend/OS here
|
||||
# rubocop:todo Homebrew/MoveToExtendOS
|
||||
if (Hardware::CPU.arm? || OS.linux?) &&
|
||||
|
@ -12,6 +12,7 @@ module Homebrew
|
||||
requested_taps = format_checkable(entries)
|
||||
return [] if requested_taps.empty?
|
||||
|
||||
require "bundle/tap_dumper"
|
||||
current_taps = Homebrew::Bundle::TapDumper.tap_names
|
||||
(requested_taps - current_taps).map { |entry| "Tap #{entry} needs to be tapped." }
|
||||
end
|
||||
|
@ -28,6 +28,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
unless success
|
||||
require "bundle/skipper"
|
||||
Homebrew::Bundle::Skipper.tap_failed!(name)
|
||||
return false
|
||||
end
|
||||
@ -37,6 +38,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.installed_taps
|
||||
require "bundle/tap_dumper"
|
||||
@installed_taps ||= Homebrew::Bundle::TapDumper.tap_names
|
||||
end
|
||||
end
|
||||
|
@ -13,6 +13,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def installed_and_up_to_date?(extension, no_upgrade: false)
|
||||
require "bundle/vscode_extension_installer"
|
||||
Homebrew::Bundle::VscodeExtensionInstaller.extension_installed?(extension)
|
||||
end
|
||||
end
|
||||
|
@ -44,6 +44,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.installed_extensions
|
||||
require "bundle/vscode_extension_dumper"
|
||||
@installed_extensions ||= Homebrew::Bundle::VscodeExtensionDumper.extensions
|
||||
end
|
||||
end
|
||||
|
@ -40,6 +40,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def self.installed_images
|
||||
require "bundle/whalebrew_dumper"
|
||||
@installed_images ||= Homebrew::Bundle::WhalebrewDumper.images
|
||||
end
|
||||
end
|
||||
|
@ -156,6 +156,7 @@ module Homebrew
|
||||
raise UsageError, "`--install` cannot be used with `install`, `upgrade` or no subcommand."
|
||||
end
|
||||
|
||||
require "bundle/commands/install"
|
||||
redirect_stdout($stderr) do
|
||||
Homebrew::Bundle::Commands::Install.run(global:, file:, no_upgrade:, verbose:, force:, quiet: true)
|
||||
end
|
||||
@ -163,6 +164,7 @@ module Homebrew
|
||||
|
||||
case subcommand
|
||||
when nil, "install", "upgrade"
|
||||
require "bundle/commands/install"
|
||||
Homebrew::Bundle::Commands::Install.run(global:, file:, no_upgrade:, verbose:, force:, quiet: args.quiet?)
|
||||
|
||||
cleanup = if ENV.fetch("HOMEBREW_BUNDLE_INSTALL_CLEANUP", nil)
|
||||
@ -172,6 +174,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
if cleanup
|
||||
require "bundle/commands/cleanup"
|
||||
Homebrew::Bundle::Commands::Cleanup.run(
|
||||
global:, file:, zap:,
|
||||
force: true,
|
||||
@ -187,6 +190,7 @@ module Homebrew
|
||||
no_type_args
|
||||
end
|
||||
|
||||
require "bundle/commands/dump"
|
||||
Homebrew::Bundle::Commands::Dump.run(
|
||||
global:, file:, force:,
|
||||
describe: args.describe?,
|
||||
@ -199,10 +203,13 @@ module Homebrew
|
||||
vscode:
|
||||
)
|
||||
when "edit"
|
||||
require "bundle/brewfile"
|
||||
exec_editor(Homebrew::Bundle::Brewfile.path(global:, file:))
|
||||
when "cleanup"
|
||||
require "bundle/commands/cleanup"
|
||||
Homebrew::Bundle::Commands::Cleanup.run(global:, file:, force:, zap:)
|
||||
when "check"
|
||||
require "bundle/commands/check"
|
||||
Homebrew::Bundle::Commands::Check.run(global:, file:, no_upgrade:, verbose:)
|
||||
when "exec", "sh", "env"
|
||||
named_args = case subcommand
|
||||
@ -225,8 +232,10 @@ module Homebrew
|
||||
when "env"
|
||||
["env"]
|
||||
end
|
||||
require "bundle/commands/exec"
|
||||
Homebrew::Bundle::Commands::Exec.run(*named_args, global:, file:, subcommand:)
|
||||
when "list"
|
||||
require "bundle/commands/list"
|
||||
Homebrew::Bundle::Commands::List.run(
|
||||
global:,
|
||||
file:,
|
||||
@ -259,8 +268,10 @@ module Homebrew
|
||||
else t
|
||||
end
|
||||
|
||||
require "bundle/commands/add"
|
||||
Homebrew::Bundle::Commands::Add.run(*named_args, type:, global:, file:)
|
||||
else
|
||||
require "bundle/commands/remove"
|
||||
Homebrew::Bundle::Commands::Remove.run(*named_args, type: selected_types.first, global:, file:)
|
||||
end
|
||||
else
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
require "ostruct"
|
||||
require "bundle"
|
||||
require "bundle/brew_dumper"
|
||||
require "tsort"
|
||||
require "formula"
|
||||
require "tab"
|
||||
|
@ -2,6 +2,9 @@
|
||||
|
||||
require "bundle"
|
||||
require "formula"
|
||||
require "bundle/brew_installer"
|
||||
require "bundle/brew_dumper"
|
||||
require "bundle/brew_services"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::BrewInstaller do
|
||||
let(:formula_name) { "mysql" }
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/brew_services"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::BrewServices do
|
||||
describe ".started_services" do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/brewfile"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Brewfile do
|
||||
describe "path" do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/cask_dumper"
|
||||
require "cask"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::CaskDumper do
|
||||
|
@ -1,6 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/cask_dumper"
|
||||
require "bundle/cask_installer"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::CaskInstaller do
|
||||
describe ".installed_casks" do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/commands/add"
|
||||
require "cask/cask_loader"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Commands::Add do
|
||||
|
@ -1,6 +1,12 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/commands/check"
|
||||
require "bundle/brew_checker"
|
||||
require "bundle/mac_app_store_checker"
|
||||
require "bundle/vscode_extension_checker"
|
||||
require "bundle/brew_installer"
|
||||
require "bundle/mac_app_store_installer"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Commands::Check do
|
||||
let(:do_check) do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/commands/cleanup"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Commands::Cleanup do
|
||||
describe "read Brewfile and current installation" do
|
||||
|
@ -1,6 +1,12 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/commands/dump"
|
||||
require "bundle/cask_dumper"
|
||||
require "bundle/brew_dumper"
|
||||
require "bundle/tap_dumper"
|
||||
require "bundle/whalebrew_dumper"
|
||||
require "bundle/vscode_extension_dumper"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Commands::Dump do
|
||||
subject(:dump) do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/commands/exec"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Commands::Exec do
|
||||
context "when a Brewfile is not found" do
|
||||
|
@ -1,6 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/commands/install"
|
||||
require "bundle/skipper"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Commands::Install do
|
||||
before do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/commands/list"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Commands::List do
|
||||
subject(:list) { described_class.run(global: false, file: nil, brews:, casks:, taps:, mas:, whalebrew:, vscode:) }
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/commands/remove"
|
||||
require "cask/cask_loader"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Commands::Remove do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/dsl"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Dsl do
|
||||
def dsl_from_string(string)
|
||||
|
@ -1,6 +1,14 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/dumper"
|
||||
require "bundle/brew_dumper"
|
||||
require "bundle/tap_dumper"
|
||||
require "bundle/cask_dumper"
|
||||
require "bundle/mac_app_store_dumper"
|
||||
require "bundle/whalebrew_dumper"
|
||||
require "bundle/vscode_extension_dumper"
|
||||
require "bundle/brew_services"
|
||||
require "cask"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Dumper do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/mac_app_store_dumper"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::MacAppStoreDumper do
|
||||
subject(:dumper) { described_class }
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/mac_app_store_installer"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::MacAppStoreInstaller do
|
||||
before do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/remover"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Remover do
|
||||
subject(:remover) { described_class }
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
require "ostruct"
|
||||
require "bundle"
|
||||
require "bundle/skipper"
|
||||
require "bundle/dsl"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::Skipper do
|
||||
subject(:skipper) { described_class }
|
||||
|
@ -1,6 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/skipper"
|
||||
require "bundle/tap_dumper"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::TapDumper do
|
||||
subject(:dumper) { described_class }
|
||||
|
@ -1,6 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/tap_installer"
|
||||
require "bundle/tap_dumper"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::TapInstaller do
|
||||
describe ".installed_taps" do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/vscode_extension_installer"
|
||||
require "extend/kernel"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::VscodeExtensionInstaller do
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/whalebrew_dumper"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::WhalebrewDumper do
|
||||
subject(:dumper) { described_class }
|
||||
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundle"
|
||||
require "bundle/whalebrew_installer"
|
||||
|
||||
RSpec.describe Homebrew::Bundle::WhalebrewInstaller do
|
||||
before do
|
||||
|
Loading…
x
Reference in New Issue
Block a user