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`):
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).
[`sudo`] `brew services cleanup`:
@ -110,6 +110,7 @@ module Homebrew
file_commands = [
*Homebrew::Services::Commands::Start::TRIGGERS,
*Homebrew::Services::Commands::Run::TRIGGERS,
*Homebrew::Services::Commands::Restart::TRIGGERS,
]
if file_commands.exclude?(subcommand)
raise UsageError, "The `#{subcommand}` subcommand does not accept the --file= argument!"
@ -166,7 +167,7 @@ module Homebrew
when *Homebrew::Services::Commands::Info::TRIGGERS
Homebrew::Services::Commands::Info.run(targets, verbose: args.verbose?, json: args.json?)
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
Homebrew::Services::Commands::Run.run(targets, args.file, verbose: args.verbose?)
when *Homebrew::Services::Commands::Start::TRIGGERS

View File

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

View File

@ -12,7 +12,7 @@ RSpec.describe Homebrew::Services::Commands::Restart do
describe "#run" do
it "fails with empty list" 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
@ -21,7 +21,7 @@ RSpec.describe Homebrew::Services::Commands::Restart do
expect(Homebrew::Services::Cli).not_to receive(:stop)
expect(Homebrew::Services::Cli).to receive(:start).once
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
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
service = instance_double(Homebrew::Services::FormulaWrapper, service_name: "name", loaded?: 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
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
service = instance_double(Homebrew::Services::FormulaWrapper, service_name: "name", loaded?: true,
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