| 
									
										
										
										
											2023-03-06 09:49:53 -08:00
										 |  |  | # typed: true | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-17 18:25:08 +09:00
										 |  |  | require "cli/parser" | 
					
						
							| 
									
										
										
										
											2016-04-17 09:19:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 22:41:47 -05:00
										 |  |  | module Homebrew | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   sig { returns(CLI::Parser) } | 
					
						
							| 
									
										
										
										
											2023-03-06 15:11:10 -08:00
										 |  |  |   def self.__prefix_args | 
					
						
							| 
									
										
										
										
											2019-01-30 21:29:43 +00:00
										 |  |  |     Homebrew::CLI::Parser.new do | 
					
						
							| 
									
										
										
										
											2021-01-15 15:04:02 -05:00
										 |  |  |       description <<~EOS | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  |         Display Homebrew's install path. *Default:* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           - macOS ARM: `#{HOMEBREW_MACOS_ARM_DEFAULT_PREFIX}` | 
					
						
							| 
									
										
										
										
											2023-09-09 12:09:38 -04:00
										 |  |  |           - macOS Intel: `#{HOMEBREW_DEFAULT_PREFIX}` | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  |           - Linux: `#{HOMEBREW_LINUX_DEFAULT_PREFIX}` | 
					
						
							| 
									
										
										
										
											2019-01-30 21:29:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-24 16:02:00 +00:00
										 |  |  |         If <formula> is provided, display the location where <formula> is or would be installed. | 
					
						
							| 
									
										
										
										
											2019-01-30 21:29:43 +00:00
										 |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  |       switch "--unbrewed", | 
					
						
							|  |  |  |              description: "List files in Homebrew's prefix not installed by Homebrew." | 
					
						
							| 
									
										
										
										
											2021-01-30 08:58:04 +08:00
										 |  |  |       switch "--installed", | 
					
						
							|  |  |  |              description: "Outputs nothing and returns a failing status code if <formula> is not installed." | 
					
						
							|  |  |  |       conflicts "--unbrewed", "--installed" | 
					
						
							| 
									
										
										
										
											2021-01-10 14:26:40 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |       named_args :formula | 
					
						
							| 
									
										
										
										
											2019-01-30 21:29:43 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-06 15:11:10 -08:00
										 |  |  |   def self.__prefix | 
					
						
							| 
									
										
										
										
											2020-07-30 18:40:10 +02:00
										 |  |  |     args = __prefix_args.parse | 
					
						
							| 
									
										
										
										
											2019-01-30 21:29:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-30 08:58:04 +08:00
										 |  |  |     raise UsageError, "`--installed` requires a formula argument." if args.installed? && args.no_named? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  |     if args.unbrewed? | 
					
						
							|  |  |  |       raise UsageError, "`--unbrewed` does not take a formula argument." unless args.no_named? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       list_unbrewed | 
					
						
							|  |  |  |     elsif args.no_named? | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |       puts HOMEBREW_PREFIX | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2021-01-30 08:58:04 +08:00
										 |  |  |       formulae = args.named.to_resolved_formulae | 
					
						
							|  |  |  |       prefixes = formulae.map do |f| | 
					
						
							| 
									
										
										
										
											2021-02-24 16:02:00 +00:00
										 |  |  |         next nil if args.installed? && !f.opt_prefix.exist? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-08 11:20:01 +10:00
										 |  |  |         # this case will be short-circuited by brew.sh logic for a single formula | 
					
						
							| 
									
										
										
										
											2021-02-24 16:02:00 +00:00
										 |  |  |         f.opt_prefix | 
					
						
							| 
									
										
										
										
											2021-01-30 08:58:04 +08:00
										 |  |  |       end.compact | 
					
						
							|  |  |  |       puts prefixes | 
					
						
							|  |  |  |       if args.installed? | 
					
						
							|  |  |  |         missing_formulae = formulae.reject(&:optlinked?) | 
					
						
							|  |  |  |                                    .map(&:name) | 
					
						
							|  |  |  |         return if missing_formulae.blank? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         raise NotAKegError, <<~EOS | 
					
						
							|  |  |  |           The following formulae are not installed: | 
					
						
							|  |  |  |           #{missing_formulae.join(" ")} | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   UNBREWED_EXCLUDE_FILES = %w[.DS_Store].freeze | 
					
						
							|  |  |  |   UNBREWED_EXCLUDE_PATHS = %w[
 | 
					
						
							|  |  |  |     */.keepme | 
					
						
							|  |  |  |     .github/* | 
					
						
							|  |  |  |     bin/brew | 
					
						
							|  |  |  |     completions/zsh/_brew | 
					
						
							|  |  |  |     docs/* | 
					
						
							|  |  |  |     lib/gdk-pixbuf-2.0/* | 
					
						
							|  |  |  |     lib/gio/* | 
					
						
							|  |  |  |     lib/node_modules/* | 
					
						
							|  |  |  |     lib/python[23].[0-9]/* | 
					
						
							| 
									
										
										
										
											2021-07-03 23:33:09 +01:00
										 |  |  |     lib/python3.[0-9][0-9]/* | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  |     lib/pypy/* | 
					
						
							|  |  |  |     lib/pypy3/* | 
					
						
							|  |  |  |     lib/ruby/gems/[12].* | 
					
						
							|  |  |  |     lib/ruby/site_ruby/[12].* | 
					
						
							|  |  |  |     lib/ruby/vendor_ruby/[12].* | 
					
						
							|  |  |  |     manpages/brew.1
 | 
					
						
							|  |  |  |     share/pypy/* | 
					
						
							|  |  |  |     share/pypy3/* | 
					
						
							|  |  |  |     share/info/dir | 
					
						
							|  |  |  |     share/man/whatis | 
					
						
							| 
									
										
										
										
											2021-02-02 17:33:54 +00:00
										 |  |  |     share/mime/* | 
					
						
							|  |  |  |     texlive/* | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  |   ].freeze | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-06 15:11:10 -08:00
										 |  |  |   def self.list_unbrewed | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  |     dirs  = HOMEBREW_PREFIX.subdirs.map { |dir| dir.basename.to_s } | 
					
						
							|  |  |  |     dirs -= %w[Library Cellar Caskroom .git] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Exclude cache, logs, and repository, if they are located under the prefix. | 
					
						
							|  |  |  |     [HOMEBREW_CACHE, HOMEBREW_LOGS, HOMEBREW_REPOSITORY].each do |dir| | 
					
						
							|  |  |  |       dirs.delete dir.relative_path_from(HOMEBREW_PREFIX).to_s | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     dirs.delete "etc" | 
					
						
							|  |  |  |     dirs.delete "var" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     arguments = dirs.sort + %w[-type f (] | 
					
						
							|  |  |  |     arguments.concat UNBREWED_EXCLUDE_FILES.flat_map { |f| %W[! -name #{f}] } | 
					
						
							|  |  |  |     arguments.concat UNBREWED_EXCLUDE_PATHS.flat_map { |d| %W[! -path #{d}] } | 
					
						
							| 
									
										
										
										
											2022-12-22 23:52:26 -05:00
										 |  |  |     arguments.push ")" | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-06 15:00:50 -08:00
										 |  |  |     cd(HOMEBREW_PREFIX) { safe_system("find", *arguments) } | 
					
						
							| 
									
										
										
										
											2020-11-30 08:41:48 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | end |