github.com/geofffranks/garden-linux@v0.0.0-20160715111146-26c893169cfa/sysconfig/runner.go (about)

     1  package sysconfig
     2  
     3  import (
     4  	"os"
     5  	"os/exec"
     6  
     7  	"code.cloudfoundry.org/garden-linux/process"
     8  	"github.com/cloudfoundry/gunk/command_runner"
     9  )
    10  
    11  type runner struct {
    12  	command_runner.CommandRunner
    13  
    14  	env process.Env
    15  }
    16  
    17  func NewRunner(config Config, commandRunner command_runner.CommandRunner) command_runner.CommandRunner {
    18  	return &runner{
    19  		CommandRunner: commandRunner,
    20  
    21  		env: config.Environ(),
    22  	}
    23  }
    24  
    25  func (runner *runner) Run(cmd *exec.Cmd) error {
    26  	return runner.CommandRunner.Run(runner.withEnv(cmd))
    27  }
    28  
    29  func (runner *runner) Start(cmd *exec.Cmd) error {
    30  	return runner.CommandRunner.Start(runner.withEnv(cmd))
    31  }
    32  
    33  func (runner *runner) Background(cmd *exec.Cmd) error {
    34  	return runner.CommandRunner.Background(runner.withEnv(cmd))
    35  }
    36  
    37  func (runner *runner) withEnv(cmd *exec.Cmd) *exec.Cmd {
    38  	if len(cmd.Env) == 0 {
    39  		cmd.Env = append(os.Environ(), runner.env.Array()...)
    40  	} else {
    41  		cmd.Env = append(cmd.Env, runner.env.Array()...)
    42  	}
    43  
    44  	return cmd
    45  }