| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | # typed: true # rubocop:todo Sorbet/StrictSigil | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  | require "services/system" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | module Homebrew | 
					
						
							|  |  |  |   module Bundle | 
					
						
							|  |  |  |     module BrewServices | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  |       def self.reset! | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         @started_services = nil | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  |       def self.stop(name, keep: false, verbose: false) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         return true unless started?(name) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  |         args = ["services", "stop", name] | 
					
						
							|  |  |  |         args << "--keep" if keep | 
					
						
							|  |  |  |         return unless Bundle.brew(*args, verbose:) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         started_services.delete(name) | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  |       def self.start(name, file: nil, verbose: false) | 
					
						
							|  |  |  |         args = ["services", "start", name] | 
					
						
							|  |  |  |         args << "--file=#{file}" if file | 
					
						
							|  |  |  |         return unless Bundle.brew(*args, verbose:) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         started_services << name | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def self.run(name, file: nil, verbose: false) | 
					
						
							|  |  |  |         args = ["services", "run", name] | 
					
						
							|  |  |  |         args << "--file=#{file}" if file | 
					
						
							|  |  |  |         return unless Bundle.brew(*args, verbose:) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         started_services << name | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  |       def self.restart(name, file: nil, verbose: false) | 
					
						
							|  |  |  |         args = ["services", "restart", name] | 
					
						
							|  |  |  |         args << "--file=#{file}" if file | 
					
						
							|  |  |  |         return unless Bundle.brew(*args, verbose:) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         started_services << name | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  |       def self.started?(name) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         started_services.include? name | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  |       def self.started_services | 
					
						
							| 
									
										
										
										
											2025-03-19 10:14:56 +00:00
										 |  |  |         @started_services ||= begin | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |           states_to_skip = %w[stopped none] | 
					
						
							| 
									
										
										
										
											2025-03-19 10:24:42 +00:00
										 |  |  |           Utils.safe_popen_read(HOMEBREW_BREW_FILE, "services", "list").lines.filter_map do |line| | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |             name, state, _plist = line.split(/\s+/) | 
					
						
							|  |  |  |             next if states_to_skip.include? state | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             name | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       def self.versioned_service_file(name) | 
					
						
							| 
									
										
										
										
											2025-04-03 11:05:07 +01:00
										 |  |  |         env_version = Bundle.formula_versions_from_env(name) | 
					
						
							| 
									
										
										
										
											2025-03-27 06:11:48 +00:00
										 |  |  |         return if env_version.nil? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         formula = Formula[name] | 
					
						
							|  |  |  |         prefix = formula.rack/env_version | 
					
						
							|  |  |  |         return unless prefix.directory? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         service_file = if Homebrew::Services::System.launchctl? | 
					
						
							|  |  |  |           prefix/"#{formula.plist_name}.plist" | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           prefix/"#{formula.service_name}.service" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         service_file if service_file.file? | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |