Skip to content

Commit

Permalink
Merge pull request #11428 from SMillerDev/fix/service/env_variables_m…
Browse files Browse the repository at this point in the history
…anual
  • Loading branch information
SMillerDev committed May 25, 2021
2 parents 1bdfacd + 4f01352 commit 6f1398a
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 7 deletions.
2 changes: 1 addition & 1 deletion Library/Homebrew/caveats.rb
Expand Up @@ -155,7 +155,7 @@ def plist_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
Expand Down
15 changes: 11 additions & 4 deletions Library/Homebrew/service.rb
Expand Up @@ -172,6 +172,16 @@ def command
@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) }
Expand Down Expand Up @@ -216,10 +226,7 @@ def to_systemd_unit
options << "StandardInput=file:#{@input_path}" if @input_path.present?
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}\""
end
options += @environment_variables.map { |k, v| "Environment=\"#{k}=#{v}\"" } if @environment_variables.present?

unit + options.join("\n")
end
Expand Down
39 changes: 37 additions & 2 deletions Library/Homebrew/test/service_spec.rb
Expand Up @@ -32,12 +32,44 @@
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"
Expand All @@ -56,6 +88,8 @@
<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>
Expand Down Expand Up @@ -122,7 +156,7 @@
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"
Expand Down Expand Up @@ -150,6 +184,7 @@
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
Expand Down

0 comments on commit 6f1398a

Please sign in to comment.