From 5fdfd4f4b193814346d79edd23f131b6fa4bdf95 Mon Sep 17 00:00:00 2001 From: gedi Date: Fri, 12 Jun 2015 16:58:45 +0300 Subject: [PATCH] do not panic on command error exit --- cmd/godog/main.go | 15 ++++++++++----- config.go | 1 + suite.go | 7 ++++++- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/cmd/godog/main.go b/cmd/godog/main.go index 99e885d..4bae592 100644 --- a/cmd/godog/main.go +++ b/cmd/godog/main.go @@ -1,9 +1,11 @@ package main import ( + "fmt" "os" "os/exec" "strings" + "time" "github.com/DATA-DOG/godog" "github.com/shiena/ansicolor" @@ -14,10 +16,8 @@ func main() { stdout := ansicolor.NewAnsiColorWriter(os.Stdout) stderr := ansicolor.NewAnsiColorWriter(os.Stdout) - builtFile := os.TempDir() + "/godog_build.go" - if err := os.Remove(builtFile); err != nil && !os.IsNotExist(err) { - panic(err) - } + builtFile := fmt.Sprintf("%s/%dgodog.go", os.TempDir(), time.Now().UnixNano()) + defer os.Remove(builtFile) // comment out for debug buf, err := godog.Build() if err != nil { @@ -35,11 +35,16 @@ func main() { w.Close() c := strings.TrimSpace("go run " + builtFile + " " + strings.Join(os.Args[1:], " ")) + // @TODO: support for windows cmd := exec.Command("sh", "-c", c) cmd.Stdout = stdout cmd.Stderr = stderr + err = cmd.Run() - if err != nil { + switch err.(type) { + case *exec.ExitError: + os.Exit(1) + case *exec.Error: panic(err) } } diff --git a/config.go b/config.go index 6fec140..d8d6442 100644 --- a/config.go +++ b/config.go @@ -18,6 +18,7 @@ type config struct { } func init() { + // @TODO: colorize flag help output flag.StringVar(&cfg.featuresPath, "features", "features", "Path to feature files") flag.StringVar(&cfg.formatterName, "formatter", "pretty", "Formatter name") } diff --git a/suite.go b/suite.go index 9ed1775..79f3d55 100644 --- a/suite.go +++ b/suite.go @@ -1,6 +1,7 @@ package godog import ( + "flag" "log" "regexp" ) @@ -24,5 +25,9 @@ func (s *suite) Step(exp *regexp.Regexp, h StepHandler) { } func (s *suite) Run() { - log.Println("running godoc, num registered steps:", len(s.steps)) + if !flag.Parsed() { + flag.Parse() + } + log.Println("running godoc, num registered steps:", len(s.steps), "color test:", cl("red", red)) + log.Println("will read features in path:", cl(cfg.featuresPath, yellow)) }