From 6c18f5c26505930fd0ae94f4ab024eb68291e1b5 Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Wed, 6 Aug 2025 10:56:30 -0700 Subject: [PATCH 1/2] Simplify Service attr helper methods --- Library/Homebrew/service.rb | 81 +++++++++++++++---------------------- 1 file changed, 33 insertions(+), 48 deletions(-) diff --git a/Library/Homebrew/service.rb b/Library/Homebrew/service.rb index 3fb072d945..c12c5afdcb 100644 --- a/Library/Homebrew/service.rb +++ b/Library/Homebrew/service.rb @@ -109,51 +109,46 @@ module Homebrew sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } def working_dir(path = nil) - case path - when nil - @working_dir - when String, Pathname + if path @working_dir = path.to_s + else + @working_dir end end sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } def root_dir(path = nil) - case path - when nil - @root_dir - when String, Pathname + if path @root_dir = path.to_s + else + @root_dir end end sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } def input_path(path = nil) - case path - when nil - @input_path - when String, Pathname + if path @input_path = path.to_s + else + @input_path end end sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } def log_path(path = nil) - case path - when nil - @log_path - when String, Pathname + if path @log_path = path.to_s + else + @log_path end end sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } def error_log_path(path = nil) - case path - when nil - @error_log_path - when String, Pathname + if path @error_log_path = path.to_s + else + @error_log_path end end @@ -178,10 +173,9 @@ module Homebrew sig { params(value: T.nilable(T::Boolean)).returns(T::Boolean) } def require_root(value = nil) - case value - when nil + if value.nil? @require_root - when TrueClass, FalseClass + else @require_root = value end end @@ -194,10 +188,9 @@ module Homebrew sig { params(value: T.nilable(T::Boolean)).returns(T.nilable(T::Boolean)) } def run_at_load(value = nil) - case value - when nil + if value.nil? @run_at_load - when TrueClass, FalseClass + else @run_at_load = value end end @@ -240,21 +233,19 @@ module Homebrew sig { params(value: T.nilable(T::Boolean)).returns(T::Boolean) } def launch_only_once(value = nil) - case value - when nil + if value.nil? @launch_only_once - when TrueClass, FalseClass + else @launch_only_once = value end end sig { params(value: T.nilable(Integer)).returns(T.nilable(Integer)) } def restart_delay(value = nil) - case value - when nil - @restart_delay - when Integer + if restart_delay @restart_delay = value + else + @restart_delay end end @@ -286,21 +277,19 @@ module Homebrew sig { params(value: T.nilable(Integer)).returns(T.nilable(Integer)) } def interval(value = nil) - case value - when nil - @interval - when Integer + if value @interval = value + else + @interval end end sig { params(value: T.nilable(String)).returns(T::Hash[Symbol, T.any(Integer, String)]) } def cron(value = nil) - case value - when nil - @cron - when String + if value @cron = parse_cron(value) + else + @cron end end @@ -352,18 +341,14 @@ module Homebrew sig { params(variables: T::Hash[Symbol, String]).returns(T.nilable(T::Hash[Symbol, String])) } def environment_variables(variables = {}) - case variables - when Hash - @environment_variables = variables.transform_values(&:to_s) - end + @environment_variables = variables.transform_values(&:to_s) end sig { params(value: T.nilable(T::Boolean)).returns(T::Boolean) } def macos_legacy_timers(value = nil) - case value - when nil + if value.nil? @macos_legacy_timers - when TrueClass, FalseClass + else @macos_legacy_timers = value end end From 899a6c59775b88fc13decbe56a7b5880f221a149 Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Sun, 10 Aug 2025 09:30:57 -0700 Subject: [PATCH 2/2] Try non-nil params --- Library/Homebrew/service.rb | 82 ++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 42 deletions(-) diff --git a/Library/Homebrew/service.rb b/Library/Homebrew/service.rb index c12c5afdcb..487f75c650 100644 --- a/Library/Homebrew/service.rb +++ b/Library/Homebrew/service.rb @@ -23,7 +23,7 @@ module Homebrew PROCESS_TYPE_ADAPTIVE = :adaptive KEEP_ALIVE_KEYS = [:always, :successful_exit, :crashed, :path].freeze - SOCKET_STRING_REGEX = %r{^([a-z]+)://(.+):([0-9]+)$}i + SOCKET_STRING_REGEX = %r{^(?[a-z]+)://(?.+):(?[0-9]+)$}i RunParam = T.type_alias { T.nilable(T.any(T::Array[T.any(String, Pathname)], String, Pathname)) } Sockets = T.type_alias { T::Hash[Symbol, { host: String, port: String, type: String }] } @@ -107,8 +107,8 @@ module Homebrew end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def working_dir(path = nil) + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def working_dir(path = T.unsafe(nil)) if path @working_dir = path.to_s else @@ -116,8 +116,8 @@ module Homebrew end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def root_dir(path = nil) + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def root_dir(path = T.unsafe(nil)) if path @root_dir = path.to_s else @@ -125,8 +125,8 @@ module Homebrew end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def input_path(path = nil) + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def input_path(path = T.unsafe(nil)) if path @input_path = path.to_s else @@ -134,8 +134,8 @@ module Homebrew end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def log_path(path = nil) + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def log_path(path = T.unsafe(nil)) if path @log_path = path.to_s else @@ -143,8 +143,8 @@ module Homebrew end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def error_log_path(path = nil) + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def error_log_path(path = T.unsafe(nil)) if path @error_log_path = path.to_s else @@ -153,10 +153,10 @@ module Homebrew end sig { - params(value: T.nilable(T.any(T::Boolean, T::Hash[Symbol, T.untyped]))) + params(value: T.any(T::Boolean, T::Hash[Symbol, T.untyped])) .returns(T.nilable(T::Hash[Symbol, T.untyped])) } - def keep_alive(value = nil) + def keep_alive(value = T.unsafe(nil)) case value when nil @keep_alive @@ -171,8 +171,8 @@ module Homebrew end end - sig { params(value: T.nilable(T::Boolean)).returns(T::Boolean) } - def require_root(value = nil) + sig { params(value: T::Boolean).returns(T::Boolean) } + def require_root(value = T.unsafe(nil)) if value.nil? @require_root else @@ -186,8 +186,8 @@ module Homebrew @require_root.present? && @require_root == true end - sig { params(value: T.nilable(T::Boolean)).returns(T.nilable(T::Boolean)) } - def run_at_load(value = nil) + sig { params(value: T::Boolean).returns(T.nilable(T::Boolean)) } + def run_at_load(value = T.unsafe(nil)) if value.nil? @run_at_load else @@ -196,32 +196,30 @@ module Homebrew end sig { - params(value: T.nilable(T.any(String, T::Hash[Symbol, String]))) + params(value: T.any(String, T::Hash[Symbol, String])) .returns(T::Hash[Symbol, T::Hash[Symbol, String]]) } - def sockets(value = nil) + def sockets(value = T.unsafe(nil)) return @sockets if value.nil? - @sockets = case value + value_hash = case value when String { listeners: value } when Hash value - end.transform_values do |socket_string| + end + + @sockets = T.must(value_hash).transform_values do |socket_string| match = socket_string.match(SOCKET_STRING_REGEX) raise TypeError, "Service#sockets a formatted socket definition as ://:" unless match - type = T.must(match[1]) - host = T.must(match[2]) - port = T.must(match[3]) - begin - IPAddr.new(host) + IPAddr.new(match[:host]) rescue IPAddr::InvalidAddressError raise TypeError, "Service#sockets expects a valid ipv4 or ipv6 host address" end - { host:, port:, type: } + { host: match[:host], port: match[:port], type: match[:type] } end end @@ -231,8 +229,8 @@ module Homebrew !@keep_alive.empty? && @keep_alive[:always] != false end - sig { params(value: T.nilable(T::Boolean)).returns(T::Boolean) } - def launch_only_once(value = nil) + sig { params(value: T::Boolean).returns(T::Boolean) } + def launch_only_once(value = T.unsafe(nil)) if value.nil? @launch_only_once else @@ -240,17 +238,17 @@ module Homebrew end end - sig { params(value: T.nilable(Integer)).returns(T.nilable(Integer)) } - def restart_delay(value = nil) - if restart_delay + sig { params(value: Integer).returns(T.nilable(Integer)) } + def restart_delay(value = T.unsafe(nil)) + if value @restart_delay = value else @restart_delay end end - sig { params(value: T.nilable(Symbol)).returns(T.nilable(Symbol)) } - def process_type(value = nil) + sig { params(value: Symbol).returns(T.nilable(Symbol)) } + def process_type(value = T.unsafe(nil)) case value when nil @process_type @@ -263,8 +261,8 @@ module Homebrew end end - sig { params(value: T.nilable(Symbol)).returns(T.nilable(Symbol)) } - def run_type(value = nil) + sig { params(value: Symbol).returns(T.nilable(Symbol)) } + def run_type(value = T.unsafe(nil)) case value when nil @run_type @@ -275,8 +273,8 @@ module Homebrew end end - sig { params(value: T.nilable(Integer)).returns(T.nilable(Integer)) } - def interval(value = nil) + sig { params(value: Integer).returns(T.nilable(Integer)) } + def interval(value = T.unsafe(nil)) if value @interval = value else @@ -284,8 +282,8 @@ module Homebrew end end - sig { params(value: T.nilable(String)).returns(T::Hash[Symbol, T.any(Integer, String)]) } - def cron(value = nil) + sig { params(value: String).returns(T::Hash[Symbol, T.any(Integer, String)]) } + def cron(value = T.unsafe(nil)) if value @cron = parse_cron(value) else @@ -344,8 +342,8 @@ module Homebrew @environment_variables = variables.transform_values(&:to_s) end - sig { params(value: T.nilable(T::Boolean)).returns(T::Boolean) } - def macos_legacy_timers(value = nil) + sig { params(value: T::Boolean).returns(T::Boolean) } + def macos_legacy_timers(value = T.unsafe(nil)) if value.nil? @macos_legacy_timers else