func exitf(format string, args ...interface{}) { if !strings.HasSuffix(format, "\n") { format = format + "\n" } cmdmain.Errorf(format, args) cmdmain.Exit(1) }
func (e *env) Run(args ...string) (out, err []byte, exitCode int) { outbuf := new(bytes.Buffer) errbuf := new(bytes.Buffer) os.Args = append(os.Args[:1], args...) cmdmain.Stdout, cmdmain.Stderr = outbuf, errbuf if e.stdin == nil { cmdmain.Stdin = strings.NewReader("") } else { cmdmain.Stdin = e.stdin } exitc := make(chan int, 1) cmdmain.Exit = func(code int) { exitc <- code runtime.Goexit() } go func() { cmdmain.Main() cmdmain.Exit(0) }() select { case exitCode = <-exitc: case <-time.After(e.timeout()): panic("timeout running command") } out = outbuf.Bytes() err = errbuf.Bytes() return }
func main() { err := cmdmain.Main() // TODO(mpl): see how errors go with other camtool modes // and move some of this accordingly to cmdmain. previousErrors := wereErrors if err != nil { wereErrors = true if !previousErrors { log.Printf("Error: %v", err) } } if wereErrors { cmdmain.Exit(2) } }
func (e *env) Run(args ...string) (out, err []byte, exitCode int) { outbuf := new(bytes.Buffer) errbuf := new(bytes.Buffer) cmdmain.Stdout, cmdmain.Stderr = outbuf, errbuf exitc := make(chan int, 1) cmdmain.Exit = func(code int) { exitc <- code runtime.Goexit() } go func() { cmdmain.Main() cmdmain.Exit(0) }() select { case exitCode = <-exitc: case <-time.After(15 * time.Second): panic("timeout running command") } out = outbuf.Bytes() err = errbuf.Bytes() return }
func main() { err := cmdmain.Main() if err != nil { cmdmain.Exit(2) } }