mirror of
https://github.com/ahmetb/kubectx.git
synced 2025-07-29 14:08:26 +00:00
Start porting to Go: parse flags
Parse help/list/swap command line flags. Signed-off-by: Ahmet Alp Balkan <ahmetb@google.com>
This commit is contained in:
parent
37c765684f
commit
6c9273e582
46
cmd/kubectx/flags.go
Normal file
46
cmd/kubectx/flags.go
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
|
||||||
|
type Op interface{}
|
||||||
|
|
||||||
|
// HelpOp describes printing help.
|
||||||
|
type HelpOp struct{}
|
||||||
|
|
||||||
|
// ListOp describes listing contexts.
|
||||||
|
type ListOp struct{}
|
||||||
|
|
||||||
|
// SwitchOp indicates intention to switch contexts.
|
||||||
|
type SwitchOp struct {
|
||||||
|
Target string // '-' for back and forth, or NAME
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnknownOp indicates an unsupported flag.
|
||||||
|
type UnknownOp struct{ Args []string }
|
||||||
|
|
||||||
|
// parseArgs looks at flags (excl. executable name, i.e. argv[0])
|
||||||
|
// and decides which operation should be taken.
|
||||||
|
func parseArgs(argv []string) Op {
|
||||||
|
if len(argv) == 0 {
|
||||||
|
return ListOp{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(argv) == 1 {
|
||||||
|
v := argv[0]
|
||||||
|
if v == "--help" || v == "-h" {
|
||||||
|
return HelpOp{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasPrefix(v, "-") && v != "-" {
|
||||||
|
return UnknownOp{argv}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO handle -d
|
||||||
|
// TODO handle -u/--unset
|
||||||
|
// TODO handle -c/--current
|
||||||
|
return SwitchOp{Target: argv[0]}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO handle too many arguments e.g. "kubectx a b c"
|
||||||
|
return UnknownOp{}
|
||||||
|
}
|
52
cmd/kubectx/flags_test.go
Normal file
52
cmd/kubectx/flags_test.go
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_parseArgs_new(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
args []string
|
||||||
|
want Op
|
||||||
|
}{
|
||||||
|
{name: "nil Args",
|
||||||
|
args: nil,
|
||||||
|
want: ListOp{}},
|
||||||
|
{name: "empty Args",
|
||||||
|
args: []string{},
|
||||||
|
want: ListOp{}},
|
||||||
|
{name: "help shorthand",
|
||||||
|
args: []string{"-h"},
|
||||||
|
want: HelpOp{}},
|
||||||
|
{name: "help long form",
|
||||||
|
args: []string{"--help"},
|
||||||
|
want: HelpOp{}},
|
||||||
|
{name: "switch by name",
|
||||||
|
args: []string{"foo"},
|
||||||
|
want: SwitchOp{Target: "foo"}},
|
||||||
|
{name: "switch by swap",
|
||||||
|
args: []string{"-"},
|
||||||
|
want: SwitchOp{Target: "-"}},
|
||||||
|
{name: "unrecognized flag",
|
||||||
|
args: []string{"-x"},
|
||||||
|
want: UnknownOp{Args: []string{"-x"}}},
|
||||||
|
// TODO add more UnknownOp cases
|
||||||
|
|
||||||
|
// TODO consider these cases
|
||||||
|
// - kubectx foo --help
|
||||||
|
// - kubectx -h --help
|
||||||
|
// - kubectx -d foo --h
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := parseArgs(tt.args)
|
||||||
|
|
||||||
|
if diff := cmp.Diff(got, tt.want); diff != "" {
|
||||||
|
t.Errorf("parseArgs(%#v) diff: %s", tt.args, diff)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
16
cmd/kubectx/main.go
Normal file
16
cmd/kubectx/main.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// parse command-line flags
|
||||||
|
argv := os.Args[1:]
|
||||||
|
fmt.Printf("%#v\n", argv)
|
||||||
|
|
||||||
|
//var op Op
|
||||||
|
//op _= parseArgs(argv) // -> DeleteOp RenameOp HelpOp UnrecognizedFlags
|
||||||
|
}
|
||||||
|
|
5
go.mod
Normal file
5
go.mod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
module github.com/ahmetb/kubectx
|
||||||
|
|
||||||
|
go 1.14
|
||||||
|
|
||||||
|
require github.com/google/go-cmp v0.4.0
|
3
go.sum
Normal file
3
go.sum
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
|
||||||
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
Loading…
Reference in New Issue
Block a user