service: ensure environment variables are prefixed in command
This commit is contained in:
parent
1bdfacddc0
commit
ef9c49c5b2
@ -155,7 +155,7 @@ class Caveats
|
||||
return if !f.plist_manual && !f.service?
|
||||
|
||||
command = if f.service?
|
||||
f.service.command.join(" ")
|
||||
f.service.manual_command
|
||||
else
|
||||
f.plist_manual
|
||||
end
|
||||
|
||||
@ -172,6 +172,16 @@ module Homebrew
|
||||
@run.map(&:to_s)
|
||||
end
|
||||
|
||||
sig { returns(String) }
|
||||
def manual_command
|
||||
instance_eval(&@service_block)
|
||||
vars = @environment_variables.except(:PATH)
|
||||
.map { |k, v| "#{k}=\"#{v}\"" }
|
||||
|
||||
out = vars + command
|
||||
out.join(" ")
|
||||
end
|
||||
|
||||
# Returns a `String` plist.
|
||||
# @return [String]
|
||||
sig { returns(String) }
|
||||
@ -217,8 +227,8 @@ module Homebrew
|
||||
options << "StandardOutput=append:#{@log_path}" if @log_path.present?
|
||||
options << "StandardError=append:#{@error_log_path}" if @error_log_path.present?
|
||||
if @environment_variables.present?
|
||||
list = @environment_variables.map { |k, v| "#{k}=#{v}" }.join("&")
|
||||
options << "Environment=\"#{list}\""
|
||||
list = @environment_variables.map { |k, v| "#{k}=#{v}" }
|
||||
.each { |value| options << "Environment=\"#{value}\"" }
|
||||
end
|
||||
|
||||
unit + options.join("\n")
|
||||
|
||||
@ -32,12 +32,44 @@ describe Homebrew::Service do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#manual_command" do
|
||||
it "returns valid manual_command" do
|
||||
f.class.service do
|
||||
run "#{HOMEBREW_PREFIX}/bin/beanstalkd"
|
||||
run_type :immediate
|
||||
environment_variables PATH: std_service_path_env, ETC_DIR: etc/"beanstalkd"
|
||||
error_log_path var/"log/beanstalkd.error.log"
|
||||
log_path var/"log/beanstalkd.log"
|
||||
working_dir var
|
||||
keep_alive true
|
||||
end
|
||||
|
||||
path = f.service.manual_command
|
||||
expect(path).to eq("ETC_DIR=\"#{HOMEBREW_PREFIX}/etc/beanstalkd\" #{HOMEBREW_PREFIX}/bin/beanstalkd")
|
||||
end
|
||||
|
||||
it "returns valid manual_command without variables" do
|
||||
f.class.service do
|
||||
run opt_bin/"beanstalkd"
|
||||
run_type :immediate
|
||||
environment_variables PATH: std_service_path_env
|
||||
error_log_path var/"log/beanstalkd.error.log"
|
||||
log_path var/"log/beanstalkd.log"
|
||||
working_dir var
|
||||
keep_alive true
|
||||
end
|
||||
|
||||
path = f.service.manual_command
|
||||
expect(path).to eq("#{HOMEBREW_PREFIX}/opt/formula_name/bin/beanstalkd")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#to_plist" do
|
||||
it "returns valid plist" do
|
||||
f.class.service do
|
||||
run [opt_bin/"beanstalkd", "test"]
|
||||
run_type :immediate
|
||||
environment_variables PATH: std_service_path_env
|
||||
environment_variables PATH: std_service_path_env, FOO: "BAR"
|
||||
error_log_path var/"log/beanstalkd.error.log"
|
||||
log_path var/"log/beanstalkd.log"
|
||||
input_path var/"in/beanstalkd"
|
||||
@ -56,6 +88,8 @@ describe Homebrew::Service do
|
||||
<dict>
|
||||
\t<key>EnvironmentVariables</key>
|
||||
\t<dict>
|
||||
\t\t<key>FOO</key>
|
||||
\t\t<string>BAR</string>
|
||||
\t\t<key>PATH</key>
|
||||
\t\t<string>#{HOMEBREW_PREFIX}/bin:#{HOMEBREW_PREFIX}/sbin:/usr/bin:/bin:/usr/sbin:/sbin</string>
|
||||
\t</dict>
|
||||
@ -122,7 +156,7 @@ describe Homebrew::Service do
|
||||
f.class.service do
|
||||
run [opt_bin/"beanstalkd", "test"]
|
||||
run_type :immediate
|
||||
environment_variables PATH: std_service_path_env
|
||||
environment_variables PATH: std_service_path_env, FOO: "BAR"
|
||||
error_log_path var/"log/beanstalkd.error.log"
|
||||
log_path var/"log/beanstalkd.log"
|
||||
input_path var/"in/beanstalkd"
|
||||
@ -150,6 +184,7 @@ describe Homebrew::Service do
|
||||
StandardOutput=append:#{HOMEBREW_PREFIX}/var/log/beanstalkd.log
|
||||
StandardError=append:#{HOMEBREW_PREFIX}/var/log/beanstalkd.error.log
|
||||
Environment=\"PATH=#{std_path}\"
|
||||
Environment=\"FOO=BAR\"
|
||||
EOS
|
||||
expect(unit).to eq(unit_expect.strip)
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user