50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: true
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "formula"
 | |
| require "cli/parser"
 | |
| require "uninstall"
 | |
| 
 | |
| module Homebrew
 | |
|   module_function
 | |
| 
 | |
|   def autoremove_args
 | |
|     Homebrew::CLI::Parser.new do
 | |
|       description <<~EOS
 | |
|         Uninstall formulae that were only installed as a dependency of another formula and are now no longer needed.
 | |
|       EOS
 | |
|       switch "-n", "--dry-run",
 | |
|              description: "List what would be uninstalled, but do not actually uninstall anything."
 | |
| 
 | |
|       named_args :none
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def get_removable_formulae(formulae)
 | |
|     removable_formulae = Formula.installed_formulae_with_no_dependents(formulae).reject do |f|
 | |
|       Tab.for_keg(f.any_installed_keg).installed_on_request
 | |
|     end
 | |
| 
 | |
|     removable_formulae += get_removable_formulae(formulae - removable_formulae) if removable_formulae.present?
 | |
| 
 | |
|     removable_formulae
 | |
|   end
 | |
| 
 | |
|   def autoremove
 | |
|     args = autoremove_args.parse
 | |
| 
 | |
|     removable_formulae = get_removable_formulae(Formula.installed)
 | |
|     return if removable_formulae.blank?
 | |
| 
 | |
|     formulae_names = removable_formulae.map(&:full_name).sort
 | |
| 
 | |
|     verb = args.dry_run? ? "Would uninstall" : "Uninstalling"
 | |
|     oh1 "#{verb} #{formulae_names.count} unneeded #{"formula".pluralize(formulae_names.count)}:"
 | |
|     puts formulae_names.join("\n")
 | |
|     return if args.dry_run?
 | |
| 
 | |
|     kegs_by_rack = removable_formulae.map(&:any_installed_keg).group_by(&:rack)
 | |
|     Uninstall.uninstall_kegs(kegs_by_rack)
 | |
|   end
 | |
| end
 | 
