| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  | # typed: strict | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "json" | 
					
						
							| 
									
										
										
										
											2024-12-12 00:01:30 -08:00
										 |  |  | require "cmd/info" | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Cask | 
					
						
							|  |  |  |   class Info | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |     sig { params(cask: Cask).returns(String) } | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     def self.get_info(cask) | 
					
						
							|  |  |  |       require "cask/installer" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-04 10:05:50 -07:00
										 |  |  |       output = "#{title_info(cask)}\n" | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |       output << "#{Formatter.url(cask.homepage)}\n" if cask.homepage | 
					
						
							| 
									
										
										
										
											2023-12-04 00:30:49 -05:00
										 |  |  |       deprecate_disable = DeprecateDisable.message(cask) | 
					
						
							| 
									
										
										
										
											2024-11-07 15:50:03 -05:00
										 |  |  |       if deprecate_disable.present? | 
					
						
							|  |  |  |         deprecate_disable.tap { |message| message[0] = message[0].upcase } | 
					
						
							|  |  |  |         output << "#{deprecate_disable}\n" | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2024-06-25 00:19:22 -04:00
										 |  |  |       output << "#{installation_info(cask)}\n" | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |       repo = repo_info(cask) | 
					
						
							|  |  |  |       output << "#{repo}\n" if repo | 
					
						
							|  |  |  |       output << name_info(cask) | 
					
						
							|  |  |  |       output << desc_info(cask) | 
					
						
							| 
									
										
										
										
											2024-08-02 20:53:50 +02:00
										 |  |  |       deps = deps_info(cask) | 
					
						
							|  |  |  |       output << deps if deps | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |       language = language_info(cask) | 
					
						
							|  |  |  |       output << language if language | 
					
						
							|  |  |  |       output << "#{artifact_info(cask)}\n" | 
					
						
							|  |  |  |       caveats = Installer.caveats(cask) | 
					
						
							|  |  |  |       output << caveats if caveats | 
					
						
							|  |  |  |       output | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 23:24:22 -08:00
										 |  |  |     sig { params(cask: Cask, args: Homebrew::Cmd::Info::Args).void } | 
					
						
							|  |  |  |     def self.info(cask, args:) | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |       puts get_info(cask) | 
					
						
							| 
									
										
										
										
											2024-07-14 08:49:39 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       require "utils/analytics" | 
					
						
							| 
									
										
										
										
											2024-12-11 23:24:22 -08:00
										 |  |  |       ::Utils::Analytics.cask_output(cask, args:) | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |     sig { params(cask: Cask).returns(String) } | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     def self.title_info(cask) | 
					
						
							|  |  |  |       title = "#{oh1_title(cask.token)}: #{cask.version}" | 
					
						
							|  |  |  |       title += " (auto_updates)" if cask.auto_updates | 
					
						
							|  |  |  |       title | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |     sig { params(cask: Cask).returns(String) } | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     def self.installation_info(cask) | 
					
						
							| 
									
										
										
										
											2024-06-25 00:19:22 -04:00
										 |  |  |       return "Not installed" unless cask.installed? | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |       return "No installed version" unless (installed_version = cask.installed_version).present? | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |       versioned_staged_path = cask.caskroom_path.join(installed_version) | 
					
						
							| 
									
										
										
										
											2024-07-15 11:24:38 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       return "Installed\n#{versioned_staged_path} (#{Formatter.error("does not exist")})\n" unless versioned_staged_path.exist? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       path_details = versioned_staged_path.children.sum(&:disk_usage) | 
					
						
							| 
									
										
										
										
											2023-04-08 14:10:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-25 00:19:22 -04:00
										 |  |  |       tab = Tab.for_cask(cask) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       info = ["Installed"] | 
					
						
							| 
									
										
										
										
											2024-07-15 11:24:38 -04:00
										 |  |  |       info << "#{versioned_staged_path} (#{disk_usage_readable(path_details)})" | 
					
						
							| 
									
										
										
										
											2024-06-25 00:19:22 -04:00
										 |  |  |       info << "  #{tab}" if tab.tabfile&.exist? | 
					
						
							|  |  |  |       info.join("\n") | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |     sig { params(cask: Cask).returns(String) } | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     def self.name_info(cask) | 
					
						
							|  |  |  |       <<~EOS | 
					
						
							|  |  |  |         #{ohai_title((cask.name.size > 1) ? "Names" : "Name")} | 
					
						
							|  |  |  |         #{cask.name.empty? ? Formatter.error("None") : cask.name.join("\n")} | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |     sig { params(cask: Cask).returns(String) } | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     def self.desc_info(cask) | 
					
						
							|  |  |  |       <<~EOS | 
					
						
							|  |  |  |         #{ohai_title("Description")} | 
					
						
							|  |  |  |         #{cask.desc.nil? ? Formatter.error("None") : cask.desc} | 
					
						
							|  |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2024-08-02 20:53:50 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sig { params(cask: Cask).returns(T.nilable(String)) } | 
					
						
							|  |  |  |     def self.deps_info(cask) | 
					
						
							|  |  |  |       depends_on = cask.depends_on | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-05 09:33:59 +01:00
										 |  |  |       formula_deps = Array(depends_on[:formula]).map(&:to_s) | 
					
						
							|  |  |  |       cask_deps = Array(depends_on[:cask]).map { |dep| "#{dep} (cask)" } | 
					
						
							| 
									
										
										
										
											2024-08-02 20:53:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       all_deps = formula_deps + cask_deps | 
					
						
							|  |  |  |       return if all_deps.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <<~EOS | 
					
						
							|  |  |  |         #{ohai_title("Dependencies")} | 
					
						
							|  |  |  |         #{all_deps.join(", ")} | 
					
						
							|  |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |     sig { params(cask: Cask).returns(T.nilable(String)) } | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     def self.language_info(cask) | 
					
						
							|  |  |  |       return if cask.languages.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <<~EOS | 
					
						
							|  |  |  |         #{ohai_title("Languages")} | 
					
						
							|  |  |  |         #{cask.languages.join(", ")} | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |     sig { params(cask: Cask).returns(T.nilable(String)) } | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     def self.repo_info(cask) | 
					
						
							|  |  |  |       return if cask.tap.nil? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       url = if cask.tap.custom_remote? && !cask.tap.remote.nil? | 
					
						
							|  |  |  |         cask.tap.remote | 
					
						
							|  |  |  |       else | 
					
						
							| 
									
										
										
										
											2023-08-10 16:08:47 +01:00
										 |  |  |         "#{cask.tap.default_remote}/blob/HEAD/#{cask.tap.relative_cask_path(cask.token)}" | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       "From: #{Formatter.url(url)}" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 16:57:34 -04:00
										 |  |  |     sig { params(cask: Cask).returns(String) } | 
					
						
							| 
									
										
										
										
											2023-03-01 00:00:54 +09:00
										 |  |  |     def self.artifact_info(cask) | 
					
						
							|  |  |  |       artifact_output = ohai_title("Artifacts").dup | 
					
						
							|  |  |  |       cask.artifacts.each do |artifact| | 
					
						
							|  |  |  |         next unless artifact.respond_to?(:install_phase) | 
					
						
							|  |  |  |         next unless DSL::ORDINARY_ARTIFACT_CLASSES.include?(artifact.class) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         artifact_output << "\n" << artifact.to_s | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       artifact_output.freeze | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |