diff --git a/cmd/gomtree/main.go b/cmd/gomtree/main.go index 89aa2af..5f05c52 100644 --- a/cmd/gomtree/main.go +++ b/cmd/gomtree/main.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "flag" "fmt" "log" @@ -17,8 +18,20 @@ var ( flAddKeywords = flag.String("K", "", "Add the specified (delimited by comma or space) keywords to the current set of keywords") flUseKeywords = flag.String("k", "", "Use the specified (delimited by comma or space) keywords as the current set of keywords") flListKeywords = flag.Bool("list-keywords", false, "List the keywords available") + flResultFormat = flag.String("result-format", "bsd", "output the validation results using the given format (bsd, json, path)") ) +var formats = map[string]func(*mtree.Result) string{ + // Outputs the errors in the BSD format. + "bsd": func(r *mtree.Result) string { + var buffer bytes.Buffer + for _, fail := range r.Failures { + fmt.Fprintln(&buffer, fail) + } + return buffer.String() + }, +} + func main() { flag.Parse() @@ -43,6 +56,14 @@ func main() { return } + // --output + formatFunc, ok := formats[*flResultFormat] + if !ok { + log.Printf("invalid output format: %s", *flResultFormat) + isErr = true + return + } + var currentKeywords []string // -k if *flUseKeywords != "" { @@ -103,8 +124,11 @@ func main() { } if res != nil && len(res.Failures) > 0 { defer os.Exit(1) - for _, failure := range res.Failures { - fmt.Println(failure) + out := formatFunc(res) + if _, err := os.Stdout.Write([]byte(out)); err != nil { + log.Println(err) + isErr = true + return } } } else {