Module: Homebrew::Bundle::Commands::Cleanup Private
- Defined in:
- bundle/commands/cleanup.rb
Overview
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.
refactor into multiple modules
Constant Summary collapse
- IGNORED_TAPS =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
%w[homebrew/core].freeze
Class Method Summary collapse
- .casks_to_uninstall(global: false, file: nil) ⇒ Object private
- .formulae_to_uninstall(global: false, file: nil) ⇒ Object private
- .lookup_formula(formula) ⇒ Object private
- .reset! ⇒ Object private
- .run(global: false, file: nil, force: false, zap: false, dsl: nil) ⇒ Object private
- .system_output_no_stderr(cmd, *args) ⇒ Object private
- .taps_to_untap(global: false, file: nil) ⇒ Object private
- .vscode_extensions_to_uninstall(global: false, file: nil) ⇒ Object private
Class Method Details
.casks_to_uninstall(global: false, file: 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.
95 96 97 98 |
# File 'bundle/commands/cleanup.rb', line 95 def self.casks_to_uninstall(global: false, file: nil) require "bundle/cask_dumper" Homebrew::Bundle::CaskDumper.cask_names - kept_casks(global:, file:) end |
.formulae_to_uninstall(global: false, file: 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.
100 101 102 103 104 105 106 107 108 109 110 |
# File 'bundle/commands/cleanup.rb', line 100 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) end current_formulae.map { |f| f[:full_name] } end |
.lookup_formula(formula) ⇒ 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.
180 181 182 183 184 185 |
# File 'bundle/commands/cleanup.rb', line 180 def self.lookup_formula(formula) Formulary.factory(formula) rescue TapFormulaUnavailableError # ignore these as an unavailable formula implies there is no tap to worry about nil end |
.reset! ⇒ 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.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'bundle/commands/cleanup.rb', line 11 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 Homebrew::Bundle::CaskDumper.reset! Homebrew::Bundle::BrewDumper.reset! Homebrew::Bundle::TapDumper.reset! Homebrew::Bundle::VscodeExtensionDumper.reset! Homebrew::Bundle::BrewServices.reset! end |
.run(global: false, file: nil, force: false, zap: false, dsl: 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.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 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 |
# File 'bundle/commands/cleanup.rb', line 28 def self.run(global: false, file: nil, force: false, zap: false, dsl: nil) @dsl ||= dsl casks = casks_to_uninstall(global:, file:) formulae = formulae_to_uninstall(global:, file:) taps = taps_to_untap(global:, file:) vscode_extensions = vscode_extensions_to_uninstall(global:, file:) if force if casks.any? args = zap ? ["--zap"] : [] Kernel.system HOMEBREW_BREW_FILE, "uninstall", "--cask", *args, "--force", *casks puts "Uninstalled #{casks.size} cask#{(casks.size == 1) ? "" : "s"}" end if formulae.any? Kernel.system HOMEBREW_BREW_FILE, "uninstall", "--formula", "--force", *formulae puts "Uninstalled #{formulae.size} formula#{(formulae.size == 1) ? "" : "e"}" end Kernel.system HOMEBREW_BREW_FILE, "untap", *taps if taps.any? Bundle.exchange_uid_if_needed! do vscode_extensions.each do |extension| Kernel.system(Bundle.which_vscode, "--uninstall-extension", extension) end end cleanup = system_output_no_stderr(HOMEBREW_BREW_FILE, "cleanup") puts cleanup unless cleanup.empty? else would_uninstall = false if casks.any? puts "Would uninstall casks:" puts Formatter.columns casks would_uninstall = true end if formulae.any? puts "Would uninstall formulae:" puts Formatter.columns formulae would_uninstall = true end if taps.any? puts "Would untap:" puts Formatter.columns taps would_uninstall = true end if vscode_extensions.any? puts "Would uninstall VSCode extensions:" puts Formatter.columns vscode_extensions would_uninstall = true end cleanup = system_output_no_stderr(HOMEBREW_BREW_FILE, "cleanup", "--dry-run") unless cleanup.empty? puts "Would `brew cleanup`:" puts cleanup end puts "Run `brew bundle cleanup --force` to make these changes." if would_uninstall || !cleanup.empty? exit 1 if would_uninstall end end |
.system_output_no_stderr(cmd, *args) ⇒ 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.
202 203 204 |
# File 'bundle/commands/cleanup.rb', line 202 def self.system_output_no_stderr(cmd, *args) IO.popen([cmd, *args], err: :close).read end |
.taps_to_untap(global: false, file: 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.
168 169 170 171 172 173 174 175 176 177 178 |
# File 'bundle/commands/cleanup.rb', line 168 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) kept_taps += kept_formulae.filter_map(&:tap).map(&:name) current_taps = Homebrew::Bundle::TapDumper.tap_names current_taps - kept_taps - IGNORED_TAPS end |
.vscode_extensions_to_uninstall(global: false, file: 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.
187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'bundle/commands/cleanup.rb', line 187 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 } # To provide a graceful migration from `Brewfile`s that don't yet or # don't want to use `vscode`: don't remove any extensions if we don't # 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 |