| 
									
										
										
										
											2020-11-25 17:03:23 +01:00
										 |  |  | # typed: strict | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | require "formula" | 
					
						
							| 
									
										
										
										
											2019-04-17 18:25:08 +09:00
										 |  |  | require "cli/parser" | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 22:41:47 -05:00
										 |  |  | module Homebrew | 
					
						
							| 
									
										
										
										
											2016-09-26 01:44:51 +02:00
										 |  |  |   module_function | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   sig { returns(CLI::Parser) } | 
					
						
							| 
									
										
										
										
											2018-07-30 18:25:38 +05:30
										 |  |  |   def edit_args | 
					
						
							|  |  |  |     Homebrew::CLI::Parser.new do | 
					
						
							| 
									
										
										
										
											2021-01-15 15:04:02 -05:00
										 |  |  |       description <<~EOS | 
					
						
							| 
									
										
										
										
											2020-11-20 00:35:48 +01:00
										 |  |  |         Open a <formula> or <cask> in the editor set by `EDITOR` or `HOMEBREW_EDITOR`, | 
					
						
							|  |  |  |         or open the Homebrew repository for editing if no formula is provided. | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2020-11-20 00:35:48 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |       switch "--formula", "--formulae", | 
					
						
							|  |  |  |              description: "Treat all named arguments as formulae." | 
					
						
							|  |  |  |       switch "--cask", "--casks", | 
					
						
							|  |  |  |              description: "Treat all named arguments as casks." | 
					
						
							| 
									
										
										
										
											2021-10-13 10:27:12 -06:00
										 |  |  |       switch "--print-path", | 
					
						
							|  |  |  |              description: "Print the file path to be edited, without opening an editor." | 
					
						
							| 
									
										
										
										
											2020-11-27 11:41:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-20 00:35:48 +01:00
										 |  |  |       conflicts "--formula", "--cask" | 
					
						
							| 
									
										
										
										
											2021-01-10 14:26:40 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |       named_args [:formula, :cask] | 
					
						
							| 
									
										
										
										
											2018-03-25 17:48:22 +05:30
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-07-30 18:25:38 +05:30
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-20 00:35:48 +01:00
										 |  |  |   sig { void } | 
					
						
							| 
									
										
										
										
											2018-07-30 18:25:38 +05:30
										 |  |  |   def edit | 
					
						
							| 
									
										
										
										
											2020-07-30 18:40:10 +02:00
										 |  |  |     args = edit_args.parse | 
					
						
							| 
									
										
										
										
											2018-03-24 19:38:34 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     unless (HOMEBREW_REPOSITORY/".git").directory? | 
					
						
							| 
									
										
										
										
											2020-12-03 00:02:22 -05:00
										 |  |  |       odie <<~EOS | 
					
						
							| 
									
										
										
										
											2012-08-01 15:56:52 -04:00
										 |  |  |         Changes will be lost! | 
					
						
							| 
									
										
										
										
											2019-04-05 12:24:10 -04:00
										 |  |  |         The first time you `brew update`, all local changes will be lost; you should | 
					
						
							|  |  |  |         thus `brew update` before you `brew edit`! | 
					
						
							| 
									
										
										
										
											2018-06-06 23:34:19 -04:00
										 |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2012-08-01 15:56:52 -04:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-02 15:36:29 -07:00
										 |  |  |     paths = if args.named.empty? | 
					
						
							|  |  |  |       # Sublime requires opting into the project editing path, | 
					
						
							|  |  |  |       # as opposed to VS Code which will infer from the .vscode path | 
					
						
							| 
									
										
										
										
											2023-02-11 00:16:11 -08:00
										 |  |  |       if which_editor(silent: true) == "subl" | 
					
						
							| 
									
										
										
										
											2021-04-02 15:36:29 -07:00
										 |  |  |         ["--project", "#{HOMEBREW_REPOSITORY}/.sublime/homebrew.sublime-project"] | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         # If no formulae are listed, open the project root in an editor. | 
					
						
							|  |  |  |         [HOMEBREW_REPOSITORY] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       args.named.to_paths.select do |path| | 
					
						
							|  |  |  |         next path if path.exist? | 
					
						
							| 
									
										
										
										
											2020-10-20 20:48:43 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-04 13:51:21 +00:00
										 |  |  |         not_exist_message = if args.cask? | 
					
						
							|  |  |  |           "#{path.basename(".rb")} doesn't exist on disk." | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           "#{path} doesn't exist on disk." | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-06 16:24:34 +01:00
										 |  |  |         message = if args.cask? | 
					
						
							| 
									
										
										
										
											2022-04-11 22:31:44 +09:00
										 |  |  |           <<~EOS | 
					
						
							| 
									
										
										
										
											2023-01-04 13:51:21 +00:00
										 |  |  |             #{not_exist_message} | 
					
						
							| 
									
										
										
										
											2022-04-11 22:31:44 +09:00
										 |  |  |             Run #{Formatter.identifier("brew create --cask --set-name #{path.basename(".rb")} $URL")} \ | 
					
						
							|  |  |  |             to create a new cask! | 
					
						
							|  |  |  |           EOS | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           <<~EOS | 
					
						
							| 
									
										
										
										
											2023-01-04 13:51:21 +00:00
										 |  |  |             #{not_exist_message} | 
					
						
							| 
									
										
										
										
											2022-04-12 08:39:03 +09:00
										 |  |  |             Run #{Formatter.identifier("brew create --formula --set-name #{path.basename} $URL")} \ | 
					
						
							| 
									
										
										
										
											2022-04-11 22:31:44 +09:00
										 |  |  |             to create a new formula! | 
					
						
							|  |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         raise UsageError, message | 
					
						
							| 
									
										
										
										
											2021-04-02 15:36:29 -07:00
										 |  |  |       end.presence | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-08-24 14:45:01 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-10 12:07:58 +01:00
										 |  |  |     if Homebrew::EnvConfig.automatically_set_no_install_from_api? && | 
					
						
							|  |  |  |        !Homebrew::EnvConfig.no_env_hints? | 
					
						
							|  |  |  |       paths.each do |path| | 
					
						
							| 
									
										
										
										
											2023-02-28 11:25:30 +00:00
										 |  |  |         next if !path.fnmatch?("**/homebrew-core/Formula/**/*.rb") && !path.fnmatch?("**/homebrew-cask/Casks/**/*.rb") | 
					
						
							| 
									
										
										
										
											2023-02-10 12:07:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         opoo <<~EOS | 
					
						
							|  |  |  |           Unless `HOMEBREW_NO_INSTALL_FROM_API` is set when running | 
					
						
							|  |  |  |           `brew install`, it will ignore your locally edited formula. | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |         break | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 10:27:12 -06:00
										 |  |  |     if args.print_path? | 
					
						
							|  |  |  |       paths.each(&method(:puts)) | 
					
						
							|  |  |  |       return | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 12:31:29 +01:00
										 |  |  |     exec_editor(*paths) | 
					
						
							| 
									
										
										
										
											2011-08-24 14:45:01 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | end |