Moved autoremove logic into cleanup.rb and formula.rb
Cleanup.rb: - Added #autoremove method - #autoremove is called in clean when HOMEBREW_AUTOREMOVE is set Formula.rb: - Added #unused_formulae_with_no_dependents and helpers Removed old autoremove.rb module.
This commit is contained in:
parent
fa43418bfb
commit
fe83500617
@ -1,64 +0,0 @@
|
||||
# typed: false
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "cask/caskroom"
|
||||
require "formula"
|
||||
require "uninstall"
|
||||
|
||||
module Homebrew
|
||||
# Helpers for removing unused formulae.
|
||||
#
|
||||
# @api private
|
||||
module Autoremove
|
||||
module_function
|
||||
|
||||
def remove_unused_formulae(dry_run: false)
|
||||
removable_formulae = unused_formulae_with_no_dependents
|
||||
|
||||
return if removable_formulae.blank?
|
||||
|
||||
formulae_names = removable_formulae.map(&:full_name).sort
|
||||
|
||||
verb = dry_run ? "Would autoremove" : "Autoremoving"
|
||||
oh1 "#{verb} #{formulae_names.count} unneeded #{"formula".pluralize(formulae_names.count)}:"
|
||||
puts formulae_names.join("\n")
|
||||
return if dry_run
|
||||
|
||||
kegs_by_rack = removable_formulae.map(&:any_installed_keg).group_by(&:rack)
|
||||
Uninstall.uninstall_kegs(kegs_by_rack)
|
||||
end
|
||||
|
||||
# An array of installed {Formula} without {Formula} or {Cask}
|
||||
# dependents that weren't installed on request.
|
||||
# @private
|
||||
def unused_formulae_with_no_dependents
|
||||
unused_formulae = unused_formulae_with_no_formula_dependents(Formula.installed)
|
||||
unused_formulae - installed_formulae_with_cask_dependents
|
||||
end
|
||||
|
||||
# Recursive function that returns an array of installed {Formula} without
|
||||
# {Formula} dependents that weren't installed on request.
|
||||
# @private
|
||||
def unused_formulae_with_no_formula_dependents(formulae)
|
||||
unused_formulae = Formula.installed_formulae_with_no_dependents(formulae).reject do |f|
|
||||
Tab.for_keg(f.any_installed_keg).installed_on_request
|
||||
end
|
||||
|
||||
if unused_formulae.present?
|
||||
unused_formulae += unused_formulae_with_no_formula_dependents(formulae - unused_formulae)
|
||||
end
|
||||
|
||||
unused_formulae
|
||||
end
|
||||
|
||||
# An array of all installed {Formula} with {Cask} dependents.
|
||||
# @private
|
||||
def installed_formulae_with_cask_dependents
|
||||
Cask::Caskroom.casks
|
||||
.flat_map { |cask| cask.depends_on[:formula] }
|
||||
.compact
|
||||
.map { |f| Formula[f] }
|
||||
.flat_map { |f| [f, *f.runtime_formula_dependencies].compact }
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -219,6 +219,9 @@ module Homebrew
|
||||
.each do |formula|
|
||||
cleanup_formula(formula, quiet: quiet, ds_store: false, cache_db: false)
|
||||
end
|
||||
|
||||
Cleanup.autoremove(dry_run: dry_run?) if Homebrew::EnvConfig.autoremove?
|
||||
|
||||
cleanup_cache
|
||||
cleanup_logs
|
||||
cleanup_lockfiles
|
||||
@ -261,6 +264,8 @@ module Homebrew
|
||||
end
|
||||
cleanup_cask(cask) if cask
|
||||
end
|
||||
|
||||
Cleanup.autoremove(dry_run: dry_run?) if Homebrew::EnvConfig.autoremove?
|
||||
end
|
||||
end
|
||||
|
||||
@ -519,5 +524,23 @@ module Homebrew
|
||||
print "and #{d} directories " if d.positive?
|
||||
puts "from #{HOMEBREW_PREFIX}"
|
||||
end
|
||||
|
||||
def self.autoremove(dry_run: false)
|
||||
removable_formulae = Formula.unused_formulae_with_no_dependents
|
||||
|
||||
return if removable_formulae.blank?
|
||||
|
||||
formulae_names = removable_formulae.map(&:full_name).sort
|
||||
|
||||
verb = dry_run ? "Would autoremove" : "Autoremoving"
|
||||
oh1 "#{verb} #{formulae_names.count} unneeded #{"formula".pluralize(formulae_names.count)}:"
|
||||
puts formulae_names.join("\n")
|
||||
return if dry_run
|
||||
|
||||
require "uninstall"
|
||||
|
||||
kegs_by_rack = removable_formulae.map(&:any_installed_keg).group_by(&:rack)
|
||||
Uninstall.uninstall_kegs(kegs_by_rack)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
# typed: true
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "autoremove"
|
||||
require "cleanup"
|
||||
require "cli/parser"
|
||||
|
||||
module Homebrew
|
||||
@ -22,6 +22,6 @@ module Homebrew
|
||||
def autoremove
|
||||
args = autoremove_args.parse
|
||||
|
||||
Autoremove.remove_unused_formulae(dry_run: args.dry_run?)
|
||||
Cleanup.autoremove(dry_run: args.dry_run?)
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
# typed: false
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "autoremove"
|
||||
require "cask/config"
|
||||
require "cask/cmd"
|
||||
require "cask/cmd/install"
|
||||
@ -255,8 +254,6 @@ module Homebrew
|
||||
)
|
||||
|
||||
Homebrew.messages.display_messages(display_times: args.display_times?)
|
||||
|
||||
Autoremove.remove_unused_formulae if Homebrew::EnvConfig.autoremove?
|
||||
rescue FormulaUnreadableError, FormulaClassUnavailableError,
|
||||
TapFormulaUnreadableError, TapFormulaClassUnavailableError => e
|
||||
# Need to rescue before `FormulaUnavailableError` (superclass of this)
|
||||
|
||||
@ -37,7 +37,7 @@ module Homebrew
|
||||
def leaves
|
||||
args = leaves_args.parse
|
||||
|
||||
leaves_list = Formula.installed_formulae_with_no_dependents
|
||||
leaves_list = Formula.installed_formulae_with_no_formula_dependents
|
||||
|
||||
leaves_list.select!(&method(:installed_on_request?)) if args.installed_on_request?
|
||||
leaves_list.select!(&method(:installed_as_dependency?)) if args.installed_as_dependency?
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
# typed: false
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "autoremove"
|
||||
require "formula_installer"
|
||||
require "development_tools"
|
||||
require "messages"
|
||||
@ -153,7 +152,5 @@ module Homebrew
|
||||
end
|
||||
|
||||
Homebrew.messages.display_messages(display_times: args.display_times?)
|
||||
|
||||
Autoremove.remove_unused_formulae if Homebrew::EnvConfig.autoremove?
|
||||
end
|
||||
end
|
||||
|
||||
@ -79,6 +79,6 @@ module Homebrew
|
||||
)
|
||||
end
|
||||
|
||||
Autoremove.remove_unused_formulae if Homebrew::EnvConfig.autoremove?
|
||||
Cleanup.autoremove if Homebrew::EnvConfig.autoremove?
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
# typed: false
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "autoremove"
|
||||
require "cli/parser"
|
||||
require "formula_installer"
|
||||
require "install"
|
||||
@ -112,8 +111,6 @@ module Homebrew
|
||||
upgrade_outdated_casks(casks, args: args) unless only_upgrade_formulae
|
||||
|
||||
Homebrew.messages.display_messages(display_times: args.display_times?)
|
||||
|
||||
Autoremove.remove_unused_formulae(dry_run: args.dry_run?) if Homebrew::EnvConfig.autoremove?
|
||||
end
|
||||
|
||||
sig { params(formulae: T::Array[Formula], args: CLI::Args).returns(T::Boolean) }
|
||||
|
||||
@ -1706,14 +1706,49 @@ class Formula
|
||||
end.uniq(&:name)
|
||||
end
|
||||
|
||||
# An array of all installed {Formula} with {Cask} dependents.
|
||||
# @private
|
||||
def self.installed_formulae_with_cask_dependents
|
||||
require "cask/caskroom"
|
||||
|
||||
Cask::Caskroom.casks
|
||||
.flat_map { |cask| cask.depends_on[:formula] }
|
||||
.compact
|
||||
.map { |f| Formula[f] }
|
||||
.flat_map { |f| [f, *f.runtime_formula_dependencies].compact }
|
||||
end
|
||||
|
||||
# An array of all installed {Formula} without {Formula} dependents
|
||||
# @private
|
||||
def self.installed_formulae_with_no_dependents(formulae = installed)
|
||||
def self.installed_formulae_with_no_formula_dependents(formulae = installed)
|
||||
return [] if formulae.blank?
|
||||
|
||||
formulae - formulae.flat_map(&:runtime_formula_dependencies)
|
||||
end
|
||||
|
||||
# Recursive function that returns an array of installed {Formula} without
|
||||
# {Formula} dependents that weren't installed on request.
|
||||
# @private
|
||||
def self.unused_formulae_with_no_formula_dependents(formulae)
|
||||
unused_formulae = installed_formulae_with_no_formula_dependents(formulae).reject do |f|
|
||||
Tab.for_keg(f.any_installed_keg).installed_on_request
|
||||
end
|
||||
|
||||
if unused_formulae.present?
|
||||
unused_formulae += unused_formulae_with_no_formula_dependents(formulae - unused_formulae)
|
||||
end
|
||||
|
||||
unused_formulae
|
||||
end
|
||||
|
||||
# An array of installed {Formula} without {Formula} or {Cask}
|
||||
# dependents that weren't installed on request.
|
||||
# @private
|
||||
def self.unused_formulae_with_no_dependents
|
||||
unused_formulae = unused_formulae_with_no_formula_dependents(installed)
|
||||
unused_formulae - installed_formulae_with_cask_dependents
|
||||
end
|
||||
|
||||
def self.installed_with_alias_path(alias_path)
|
||||
return [] if alias_path.nil?
|
||||
|
||||
|
||||
@ -446,7 +446,7 @@ describe Formula do
|
||||
end
|
||||
end
|
||||
|
||||
describe "::installed_formulae_with_no_dependents" do
|
||||
describe "::installed_formulae_with_no_formula_dependents" do
|
||||
let(:formula_is_dep) do
|
||||
formula "foo" do
|
||||
url "foo-1.1"
|
||||
@ -473,12 +473,12 @@ describe Formula do
|
||||
specify "without formulae parameter" do
|
||||
allow(described_class).to receive(:installed).and_return(formulae)
|
||||
|
||||
expect(described_class.installed_formulae_with_no_dependents)
|
||||
expect(described_class.installed_formulae_with_no_formula_dependents)
|
||||
.to eq([formula_with_deps])
|
||||
end
|
||||
|
||||
specify "with formulae parameter" do
|
||||
expect(described_class.installed_formulae_with_no_dependents(formulae))
|
||||
expect(described_class.installed_formulae_with_no_formula_dependents(formulae))
|
||||
.to eq([formula_with_deps])
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user