diff --git a/main.go b/main.go index 1dea9dd..1cc9c90 100644 --- a/main.go +++ b/main.go @@ -15,8 +15,9 @@ package main import ( "flag" "fmt" - "github.com/pilu/fresh/runner" "os" + + "github.com/pilu/fresh/runner" ) func main() { diff --git a/runner/runner.go b/runner/runner.go index f15f89a..bebd22d 100644 --- a/runner/runner.go +++ b/runner/runner.go @@ -1,39 +1,53 @@ package runner import ( - "io" - "os/exec" + "flag" + "io" + "os/exec" + "strings" ) -func run() bool { - runnerLog("Running...") - - cmd := exec.Command(buildPath()) - - stderr, err := cmd.StderrPipe() - if err != nil { - fatal(err) - } - - stdout, err := cmd.StdoutPipe() - if err != nil { - fatal(err) - } +var cmdArgs string - err = cmd.Start() - if err != nil { - fatal(err) - } - - go io.Copy(appLogWriter{}, stderr) - go io.Copy(appLogWriter{}, stdout) - - go func() { - <-stopChannel - pid := cmd.Process.Pid - runnerLog("Killing PID %d", pid) - cmd.Process.Kill() - }() +func init() { + flag.StringVar(&cmdArgs, "a", "", "Command line arguments to pass to the process") +} - return true +func run() bool { + runnerLog("Running...") + + var cmd *exec.Cmd + if cmdArgs != "" { + args := strings.Split(cmdArgs, " ") + cmd = exec.Command(buildPath(), args...) + } else { + cmd = exec.Command(buildPath()) + } + + stderr, err := cmd.StderrPipe() + if err != nil { + fatal(err) + } + + stdout, err := cmd.StdoutPipe() + if err != nil { + fatal(err) + } + + err = cmd.Start() + if err != nil { + fatal(err) + } + + go io.Copy(appLogWriter{}, stderr) + go io.Copy(appLogWriter{}, stdout) + + go func() { + <-stopChannel + pid := cmd.Process.Pid + runnerLog("Killing PID %d", pid) + cmd.Process.Kill() + }() + + return true } diff --git a/runner/settings.go b/runner/settings.go index 61e2412..470f924 100644 --- a/runner/settings.go +++ b/runner/settings.go @@ -2,12 +2,13 @@ package runner import ( "fmt" - "github.com/pilu/config" "os" "path/filepath" "strconv" "strings" "time" + + "github.com/pilu/config" ) const (