cmd: add autoremove command
This commit is contained in:
		
							parent
							
								
									4127a7b624
								
							
						
					
					
						commit
						0fa417706a
					
				
							
								
								
									
										54
									
								
								Library/Homebrew/cmd/autoremove.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								Library/Homebrew/cmd/autoremove.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,54 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "formula"
 | 
			
		||||
require "cli/parser"
 | 
			
		||||
 | 
			
		||||
module Homebrew
 | 
			
		||||
  module_function
 | 
			
		||||
 | 
			
		||||
  def autoremove_args
 | 
			
		||||
    Homebrew::CLI::Parser.new do
 | 
			
		||||
      usage_banner <<~EOS
 | 
			
		||||
        `autoremove` [<options>]
 | 
			
		||||
 | 
			
		||||
        Remove packages that weren't installed on request and are no longer needed.
 | 
			
		||||
      EOS
 | 
			
		||||
      switch "-n", "--dry-run",
 | 
			
		||||
             description: "Just print what would be removed."
 | 
			
		||||
      named 0
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def get_removable_formulae(installed_formulae)
 | 
			
		||||
    removable_formulae = []
 | 
			
		||||
 | 
			
		||||
    installed_formulae.each do |formula|
 | 
			
		||||
      # Reject formulae installed on request.
 | 
			
		||||
      next if Tab.for_keg(formula.any_installed_keg).installed_on_request
 | 
			
		||||
      # Reject formulae which are needed at runtime by other formulae.
 | 
			
		||||
      next if installed_formulae.flat_map(&:runtime_formula_dependencies).include?(formula)
 | 
			
		||||
 | 
			
		||||
      removable_formulae << installed_formulae.delete(formula)
 | 
			
		||||
      removable_formulae += get_removable_formulae(installed_formulae)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    removable_formulae
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def autoremove
 | 
			
		||||
    args = autoremove_args.parse
 | 
			
		||||
 | 
			
		||||
    removable_formulae = get_removable_formulae(Formula.installed.sort)
 | 
			
		||||
 | 
			
		||||
    return if removable_formulae.blank?
 | 
			
		||||
 | 
			
		||||
    formulae_names = removable_formulae.map(&:full_name)
 | 
			
		||||
 | 
			
		||||
    oh1 "Formulae that could be removed"
 | 
			
		||||
    puts formulae_names
 | 
			
		||||
 | 
			
		||||
    return if args.dry_run?
 | 
			
		||||
 | 
			
		||||
    system HOMEBREW_BREW_FILE, "rm", *formulae_names
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -33,6 +33,7 @@ RSpec/MultipleDescribes:
 | 
			
		||||
    - 'cmd/--repository_spec.rb'
 | 
			
		||||
    - 'cmd/--version_spec.rb'
 | 
			
		||||
    - 'cmd/analytics_spec.rb'
 | 
			
		||||
    - 'cmd/autoremove_spec.rb'
 | 
			
		||||
    - 'cmd/cleanup_spec.rb'
 | 
			
		||||
    - 'cmd/commands_spec.rb'
 | 
			
		||||
    - 'cmd/config_spec.rb'
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								Library/Homebrew/test/cmd/autoremove_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Library/Homebrew/test/cmd/autoremove_spec.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "cmd/shared_examples/args_parse"
 | 
			
		||||
 | 
			
		||||
describe "Homebrew.autoremove_args" do
 | 
			
		||||
  it_behaves_like "parseable arguments"
 | 
			
		||||
end
 | 
			
		||||
@ -12,6 +12,7 @@
 | 
			
		||||
abv
 | 
			
		||||
analytics
 | 
			
		||||
audit
 | 
			
		||||
autoremove
 | 
			
		||||
bottle
 | 
			
		||||
bump
 | 
			
		||||
bump-cask-pr
 | 
			
		||||
 | 
			
		||||
@ -56,6 +56,13 @@ Turn Homebrew's analytics on or off respectively.
 | 
			
		||||
`brew analytics regenerate-uuid`:
 | 
			
		||||
Regenerate the UUID used for Homebrew's analytics.
 | 
			
		||||
 | 
			
		||||
### `autoremove` [*`options`*]
 | 
			
		||||
 | 
			
		||||
Remove packages that weren't installed on request and are no longer needed.
 | 
			
		||||
 | 
			
		||||
* `-n`, `--dry-run`:
 | 
			
		||||
  Just print what would be removed.
 | 
			
		||||
 | 
			
		||||
### `cask` *`command`* [*`options`*] [*`cask`*]
 | 
			
		||||
 | 
			
		||||
Homebrew Cask provides a friendly CLI workflow for the administration of macOS applications distributed as binaries.
 | 
			
		||||
 | 
			
		||||
@ -53,6 +53,13 @@ Control Homebrew\'s anonymous aggregate user behaviour analytics\. Read more at
 | 
			
		||||
\fBbrew analytics regenerate\-uuid\fR
 | 
			
		||||
    Regenerate the UUID used for Homebrew\'s analytics\.
 | 
			
		||||
.
 | 
			
		||||
.SS "\fBautoremove\fR [\fIoptions\fR]"
 | 
			
		||||
Remove packages that weren\'t installed on request and are no longer needed\.
 | 
			
		||||
.
 | 
			
		||||
.TP
 | 
			
		||||
\fB\-n\fR, \fB\-\-dry\-run\fR
 | 
			
		||||
Just print what would be removed\.
 | 
			
		||||
.
 | 
			
		||||
.SS "\fBcask\fR \fIcommand\fR [\fIoptions\fR] [\fIcask\fR]"
 | 
			
		||||
Homebrew Cask provides a friendly CLI workflow for the administration of macOS applications distributed as binaries\.
 | 
			
		||||
.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user