services: support --file= in restart command

This commit is contained in:
Bo Anderson 2025-03-27 06:10:24 +00:00
parent 615fb764a1
commit 2b906e4fe3
No known key found for this signature in database
3 changed files with 17 additions and 10 deletions

View File

@ -45,7 +45,7 @@ module Homebrew
[`sudo`] `brew services kill` (<formula>|`--all`): [`sudo`] `brew services kill` (<formula>|`--all`):
Stop the service <formula> immediately but keep it registered to launch at login (or boot). Stop the service <formula> immediately but keep it registered to launch at login (or boot).
[`sudo`] `brew services restart` (<formula>|`--all`): [`sudo`] `brew services restart` (<formula>|`--all`|`--file=`):
Stop (if necessary) and start the service <formula> immediately and register it to launch at login (or boot). Stop (if necessary) and start the service <formula> immediately and register it to launch at login (or boot).
[`sudo`] `brew services cleanup`: [`sudo`] `brew services cleanup`:
@ -110,6 +110,7 @@ module Homebrew
file_commands = [ file_commands = [
*Homebrew::Services::Commands::Start::TRIGGERS, *Homebrew::Services::Commands::Start::TRIGGERS,
*Homebrew::Services::Commands::Run::TRIGGERS, *Homebrew::Services::Commands::Run::TRIGGERS,
*Homebrew::Services::Commands::Restart::TRIGGERS,
] ]
if file_commands.exclude?(subcommand) if file_commands.exclude?(subcommand)
raise UsageError, "The `#{subcommand}` subcommand does not accept the --file= argument!" raise UsageError, "The `#{subcommand}` subcommand does not accept the --file= argument!"
@ -166,7 +167,7 @@ module Homebrew
when *Homebrew::Services::Commands::Info::TRIGGERS when *Homebrew::Services::Commands::Info::TRIGGERS
Homebrew::Services::Commands::Info.run(targets, verbose: args.verbose?, json: args.json?) Homebrew::Services::Commands::Info.run(targets, verbose: args.verbose?, json: args.json?)
when *Homebrew::Services::Commands::Restart::TRIGGERS when *Homebrew::Services::Commands::Restart::TRIGGERS
Homebrew::Services::Commands::Restart.run(targets, verbose: args.verbose?) Homebrew::Services::Commands::Restart.run(targets, args.file, verbose: args.verbose?)
when *Homebrew::Services::Commands::Run::TRIGGERS when *Homebrew::Services::Commands::Run::TRIGGERS
Homebrew::Services::Commands::Run.run(targets, args.file, verbose: args.verbose?) Homebrew::Services::Commands::Run.run(targets, args.file, verbose: args.verbose?)
when *Homebrew::Services::Commands::Start::TRIGGERS when *Homebrew::Services::Commands::Start::TRIGGERS

View File

@ -14,8 +14,14 @@ module Homebrew
TRIGGERS = %w[restart relaunch reload r].freeze TRIGGERS = %w[restart relaunch reload r].freeze
sig { params(targets: T::Array[Services::FormulaWrapper], verbose: T::Boolean).void } sig {
def self.run(targets, verbose:) params(
targets: T::Array[Services::FormulaWrapper],
custom_plist: T.nilable(String),
verbose: T::Boolean,
).void
}
def self.run(targets, custom_plist, verbose:)
Services::Cli.check(targets) Services::Cli.check(targets)
ran = [] ran = []
@ -30,8 +36,8 @@ module Homebrew
Services::Cli.stop([service], verbose:) if service.loaded? Services::Cli.stop([service], verbose:) if service.loaded?
end end
Services::Cli.run(targets, verbose:) if ran.present? Services::Cli.run(targets, custom_plist, verbose:) if ran.present?
Services::Cli.start(started, verbose:) if started.present? Services::Cli.start(started, custom_plist, verbose:) if started.present?
end end
end end
end end

View File

@ -12,7 +12,7 @@ RSpec.describe Homebrew::Services::Commands::Restart do
describe "#run" do describe "#run" do
it "fails with empty list" do it "fails with empty list" do
expect do expect do
described_class.run([], verbose: false) described_class.run([], nil, verbose: false)
end.to raise_error UsageError, "Invalid usage: Formula(e) missing, please provide a formula name or use --all" end.to raise_error UsageError, "Invalid usage: Formula(e) missing, please provide a formula name or use --all"
end end
@ -21,7 +21,7 @@ RSpec.describe Homebrew::Services::Commands::Restart do
expect(Homebrew::Services::Cli).not_to receive(:stop) expect(Homebrew::Services::Cli).not_to receive(:stop)
expect(Homebrew::Services::Cli).to receive(:start).once expect(Homebrew::Services::Cli).to receive(:start).once
service = instance_double(Homebrew::Services::FormulaWrapper, service_name: "name", loaded?: false) service = instance_double(Homebrew::Services::FormulaWrapper, service_name: "name", loaded?: false)
expect { described_class.run([service], verbose: false) }.not_to raise_error expect { described_class.run([service], nil, verbose: false) }.not_to raise_error
end end
it "starts if services are loaded with file" do it "starts if services are loaded with file" do
@ -30,7 +30,7 @@ RSpec.describe Homebrew::Services::Commands::Restart do
expect(Homebrew::Services::Cli).to receive(:stop).once expect(Homebrew::Services::Cli).to receive(:stop).once
service = instance_double(Homebrew::Services::FormulaWrapper, service_name: "name", loaded?: true, service = instance_double(Homebrew::Services::FormulaWrapper, service_name: "name", loaded?: true,
service_file_present?: true) service_file_present?: true)
expect { described_class.run([service], verbose: false) }.not_to raise_error expect { described_class.run([service], nil, verbose: false) }.not_to raise_error
end end
it "runs if services are loaded without file" do it "runs if services are loaded without file" do
@ -39,7 +39,7 @@ service_file_present?: true)
expect(Homebrew::Services::Cli).to receive(:stop).once expect(Homebrew::Services::Cli).to receive(:stop).once
service = instance_double(Homebrew::Services::FormulaWrapper, service_name: "name", loaded?: true, service = instance_double(Homebrew::Services::FormulaWrapper, service_name: "name", loaded?: true,
service_file_present?: false) service_file_present?: false)
expect { described_class.run([service], verbose: false) }.not_to raise_error expect { described_class.run([service], nil, verbose: false) }.not_to raise_error
end end
end end
end end