Sha256: d01c74deb6c64c05cc02d0844ceffe2f6b9a446b4573fe4b6615509adec6f967
Contents?: true
Size: 1.28 KB
Versions: 4
Compression:
Stored size: 1.28 KB
Contents
require 'open3' require 'shellwords' module Packer class Runner class CommandExecutionError < StandardError end def self.run!(*args, quiet: false) cmd = Shellwords.shelljoin(args.flatten) status = 0 stdout = '' stderr = '' if quiet # Run without streaming std* to any screen stdout, stderr, status = Open3.capture3(cmd) else # Run but stream as well as capture stdout to the screen # see: http://stackoverflow.com/a/1162850/83386 Open3.popen3(cmd) do |std_in, std_out, std_err, thread| # read each stream from a new thread Thread.new do until (raw = std_out.getc).nil? do stdout << raw $stdout.write "#{raw}" end end Thread.new do until (raw_line = std_err.gets).nil? do stderr << raw_line end end thread.join # don't exit until the external process is done status = thread.value end end raise CommandExecutionError.new(stderr) unless status == 0 stdout end def self.exec!(*args) cmd = Shellwords.shelljoin(args.flatten) logger.debug "Exec'ing: #{cmd}, in: #{Dir.pwd}" Kernel.exec cmd end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
packer-config-1.6.0 | lib/packer/runner.rb |
packer-config-1.5.0 | lib/packer/runner.rb |
packer-config-1.4.0 | lib/packer/runner.rb |
packer-config-1.3.1 | lib/packer/runner.rb |