Re-introduce DEBUG env var stack traces

Signed-off-by: Ahmet Alp Balkan <ahmetb@google.com>
This commit is contained in:
Ahmet Alp Balkan 2020-04-12 17:57:27 -07:00
parent 195e6315da
commit 077d8a829d
No known key found for this signature in database
GPG Key ID: 441833503E604E2C
4 changed files with 19 additions and 12 deletions

View File

@ -14,6 +14,9 @@ const (
// EnvForceColor describes the "internal" environment variable to force // EnvForceColor describes the "internal" environment variable to force
// color usage to show current context in a list. // color usage to show current context in a list.
EnvForceColor = `_KUBECTX_FORCE_COLOR` EnvForceColor = `_KUBECTX_FORCE_COLOR`
// EnvDebug describes the internal environment variable for more verbose logging.
EnvDebug = `DEBUG`
) )
func useColors() bool { func useColors() bool {

View File

@ -1,11 +1,10 @@
package main package main
import ( import (
"fmt"
"io" "io"
"os" "os"
"strings" "strings"
"github.com/pkg/errors"
) )
type Op interface { type Op interface {
@ -50,9 +49,9 @@ func parseArgs(argv []string) Op {
} }
if strings.HasPrefix(v, "-") && v != "-" { 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 SwitchOp{Target: argv[0]}
} }
return UnsupportedOp{Err: errors.New("too many arguments")} return UnsupportedOp{Err: fmt.Errorf("too many arguments")}
} }

View File

@ -1,10 +1,10 @@
package main package main
import ( import (
"fmt"
"testing" "testing"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
"github.com/pkg/errors"
) )
func Test_parseArgs_new(t *testing.T) { func Test_parseArgs_new(t *testing.T) {
@ -60,7 +60,10 @@ func Test_parseArgs_new(t *testing.T) {
want: RenameOp{"a", "."}}, want: RenameOp{"a", "."}},
{name: "unrecognized flag", {name: "unrecognized flag",
args: []string{"-x"}, 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 add more UnsupportedOp cases
// TODO consider these cases // TODO consider these cases

View File

@ -9,18 +9,20 @@ import (
) )
func main() { func main() {
// parse command-line flags op := parseArgs(os.Args[1:])
var op Op
op = parseArgs(os.Args[1:])
if err := op.Run(os.Stdout, os.Stderr); err != nil { if err := op.Run(os.Stdout, os.Stderr); err != nil {
printError(os.Stderr, err.Error()) 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{}) { 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{}) { func printWarning(w io.Writer, format string, args ...interface{}) {