From e3aeb7f4d7594750dcf0844d4a3aab45fbf2cb87 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 25 Feb 2014 12:14:52 -0500 Subject: [PATCH] Change Environment#execute() options Hash to contain :env and :options keys for Kernel#system() --- lib/rscons/environment.rb | 8 ++++++-- spec/rscons/environment_spec.rb | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/rscons/environment.rb b/lib/rscons/environment.rb index 5babd64..6dfb085 100644 --- a/lib/rscons/environment.rb +++ b/lib/rscons/environment.rb @@ -224,7 +224,9 @@ module Rscons # @param short_desc [String] Message to print if the Environment's echo # mode is set to :short # @param command [Array] The command to execute. - # @param options [Hash] Optional options to pass to Kernel#system. + # @param options [Hash] Optional options, possible keys: + # - :env - environment Hash to pass to Kernel#system. + # - :options - options Hash to pass to Kernel#system. def execute(short_desc, command, options = {}) print_command = proc do puts command.map { |c| c =~ /\s/ ? "'#{c}'" : c }.join(' ') @@ -234,7 +236,9 @@ module Rscons elsif @echo == :short puts short_desc end - system(*command, options).tap do |result| + env_args = options[:env] ? [options[:env]] : [] + options_args = options[:options] ? [options[:options]] : [] + system(*env_args, *command, *options_args).tap do |result| unless result or @echo == :command $stdout.write "Failed command was: " print_command.call diff --git a/spec/rscons/environment_spec.rb b/spec/rscons/environment_spec.rb index 47d7c23..eee9aed 100644 --- a/spec/rscons/environment_spec.rb +++ b/spec/rscons/environment_spec.rb @@ -219,7 +219,7 @@ module Rscons it "prints the short description and executes the command" do env = Environment.new(echo: :short) env.should_receive(:puts).with("short desc") - env.should_receive(:system).with("a", "command", {}).and_return(true) + env.should_receive(:system).with("a", "command").and_return(true) env.execute("short desc", ["a", "command"]) end end @@ -228,7 +228,7 @@ module Rscons it "prints the short description, executes the command, and prints the failed command line" do env = Environment.new(echo: :short) env.should_receive(:puts).with("short desc") - env.should_receive(:system).with("a", "command", {}).and_return(false) + env.should_receive(:system).with("a", "command").and_return(false) $stdout.should_receive(:write).with("Failed command was: ") env.should_receive(:puts).with("a command") env.execute("short desc", ["a", "command"]) @@ -240,8 +240,8 @@ module Rscons it "prints the command executed and executes the command" do env = Environment.new(echo: :command) env.should_receive(:puts).with("a command '--arg=val with spaces'") - env.should_receive(:system).with("a", "command", "--arg=val with spaces", opt: :val).and_return(false) - env.execute("short desc", ["a", "command", "--arg=val with spaces"], opt: :val) + env.should_receive(:system).with({modified: :environment}, "a", "command", "--arg=val with spaces", {opt: :val}).and_return(false) + env.execute("short desc", ["a", "command", "--arg=val with spaces"], env: {modified: :environment}, options: {opt: :val}) end end end