From 077d8a829dfd964060a94e04c44c01ba58c10831 Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Sun, 12 Apr 2020 17:57:27 -0700 Subject: [PATCH] Re-introduce DEBUG env var stack traces Signed-off-by: Ahmet Alp Balkan --- cmd/kubectx/env.go | 3 +++ cmd/kubectx/flags.go | 7 +++---- cmd/kubectx/flags_test.go | 7 +++++-- cmd/kubectx/main.go | 14 ++++++++------ 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/cmd/kubectx/env.go b/cmd/kubectx/env.go index 0bbcda9..98319b0 100644 --- a/cmd/kubectx/env.go +++ b/cmd/kubectx/env.go @@ -14,6 +14,9 @@ const ( // EnvForceColor describes the "internal" environment variable to force // color usage to show current context in a list. EnvForceColor = `_KUBECTX_FORCE_COLOR` + + // EnvDebug describes the internal environment variable for more verbose logging. + EnvDebug = `DEBUG` ) func useColors() bool { diff --git a/cmd/kubectx/flags.go b/cmd/kubectx/flags.go index 11603c9..87cd7c7 100644 --- a/cmd/kubectx/flags.go +++ b/cmd/kubectx/flags.go @@ -1,11 +1,10 @@ package main import ( + "fmt" "io" "os" "strings" - - "github.com/pkg/errors" ) type Op interface { @@ -50,9 +49,9 @@ func parseArgs(argv []string) Op { } if strings.HasPrefix(v, "-") && v != "-" { - return UnsupportedOp{Err: errors.Errorf("unsupported option %s", v)} + return UnsupportedOp{Err: fmt.Errorf("unsupported option '%s'", v)} } return SwitchOp{Target: argv[0]} } - return UnsupportedOp{Err: errors.New("too many arguments")} + return UnsupportedOp{Err: fmt.Errorf("too many arguments")} } diff --git a/cmd/kubectx/flags_test.go b/cmd/kubectx/flags_test.go index 6c6128c..a4990b6 100644 --- a/cmd/kubectx/flags_test.go +++ b/cmd/kubectx/flags_test.go @@ -1,10 +1,10 @@ package main import ( + "fmt" "testing" "github.com/google/go-cmp/cmp" - "github.com/pkg/errors" ) func Test_parseArgs_new(t *testing.T) { @@ -60,7 +60,10 @@ func Test_parseArgs_new(t *testing.T) { want: RenameOp{"a", "."}}, {name: "unrecognized flag", args: []string{"-x"}, - want: UnsupportedOp{Err: errors.Errorf("unsupported option \"-x\"")}}, + want: UnsupportedOp{Err: fmt.Errorf("unsupported option \"-x\"")}}, + {name: "too many args", + args: []string{"a", "b", "c"}, + want: UnsupportedOp{Err: fmt.Errorf("too many arguments")}}, // TODO add more UnsupportedOp cases // TODO consider these cases diff --git a/cmd/kubectx/main.go b/cmd/kubectx/main.go index 45767fd..c9657ec 100644 --- a/cmd/kubectx/main.go +++ b/cmd/kubectx/main.go @@ -9,18 +9,20 @@ import ( ) func main() { - // parse command-line flags - var op Op - op = parseArgs(os.Args[1:]) - + op := parseArgs(os.Args[1:]) if err := op.Run(os.Stdout, os.Stderr); err != nil { printError(os.Stderr, err.Error()) - os.Exit(1) + + if _, ok := os.LookupEnv(EnvDebug); ok { + // print stack trace in verbose mode + fmt.Fprintf(os.Stderr, "[DEBUG] error: %+v\n", err) + } + defer os.Exit(1) } } func printError(w io.Writer, format string, args ...interface{}) { - fmt.Fprintf(os.Stderr, color.RedString("error: ")+format+"\n", args...) + fmt.Fprintf(w, color.RedString("error: ")+format+"\n", args...) } func printWarning(w io.Writer, format string, args ...interface{}) {