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
|