Skip to content
Snippets Groups Projects
Unverified Commit ef9c49c5 authored by Sean Molenaar's avatar Sean Molenaar Committed by Sean Molenaar
Browse files

service: ensure environment variables are prefixed in command

parent 1bdfacdd
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment