From 4c955af9f7f490aff6db5efcfc5beceb882045b1 Mon Sep 17 00:00:00 2001 From: Lamont Granquist Date: Thu, 30 May 2019 17:51:33 -0700 Subject: WIP Signed-off-by: Lamont Granquist --- lib/mixlib/shellout/windows.rb | 13 ++++++++++++- spec/mixlib/shellout/windows_spec.rb | 4 ++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/mixlib/shellout/windows.rb b/lib/mixlib/shellout/windows.rb index 27adbbd..a42a30e 100644 --- a/lib/mixlib/shellout/windows.rb +++ b/lib/mixlib/shellout/windows.rb @@ -66,7 +66,7 @@ module Mixlib # # Set cwd, environment, appname, etc. # - app_name, command_line = command_to_run(command) + app_name, command_line = command_to_run(combine_args(*command)) create_process_args = { app_name: app_name, command_line: command_line, @@ -196,6 +196,17 @@ module Mixlib true end + def combine_args(*args) + return args if args.length == 1 + args.map do |arg| + if arg.match(/[ \t\n\v"]/) + "\"#{arg}\"" + else + arg + end + end.join(" ") + end + def command_to_run(command) return run_under_cmd(command) if should_run_under_cmd?(command) diff --git a/spec/mixlib/shellout/windows_spec.rb b/spec/mixlib/shellout/windows_spec.rb index d4edabc..034f4e6 100644 --- a/spec/mixlib/shellout/windows_spec.rb +++ b/spec/mixlib/shellout/windows_spec.rb @@ -15,6 +15,10 @@ describe "Mixlib::ShellOut::Windows", :windows_only do end end + context "with arrays" do + with_command(%w{echo %PATH%}) { is_expected.to be_truthy } + end + context "when unquoted" do with_command(%q{ruby -e 'prints "foobar"'}) { is_expected.not_to be_truthy } -- cgit v1.2.1