8000 Fixed kubecolor coloring `oc rsh` by applejag · Pull Request #117 · kubecolor/kubecolor · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Fixed kubecolor coloring oc rsh #117

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 23 additions & 25 deletions command/subcommand.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,31 +50,29 @@ func ResolveSubcommand(args []string, config *Config) (bool, *kubectl.Subcommand
return subcommandFound && isColoringSupported(subcommandInfo.Subcommand), subcommandInfo
}

func isColoringSupported(sc kubectl.Subcommand) bool {
// when you add something here, it won't be colorized
unsupported := []kubectl.Subcommand{
kubectl.Create,
kubectl.Delete,
kubectl.Edit,
kubectl.Attach,
kubectl.Replace,
kubectl.Completion,
kubectl.Exec,
kubectl.Proxy,
kubectl.Plugin,
kubectl.Wait,
kubectl.Run,
kubectl.Ctx,
kubectl.Ns,
kubectl.Debug,
kubectl.KubectlPlugin,
}
// when you add something here, it won't be colorized
var unsupported = map[kubectl.Subcommand]struct{}{
kubectl.Attach: {},
kubectl.Completion: {},
kubectl.Create: {},
kubectl.Ctx: {},
kubectl.Debug: {},
kubectl.Delete: {},
kubectl.Edit: {},
kubectl.Exec: {},
kubectl.KubectlPlugin: {},
kubectl.Ns: {},
kubectl.Plugin: {},
kubectl.Proxy: {},
kubectl.Replace: {},
kubectl.Run: {},
kubectl.Wait: {},

for _, u := range unsupported {
if sc == u {
return false
}
}
// oc (OpenShift CLI) specific subcommands
kubectl.Rsh: {},
}

return true
func isColoringSupported(sc kubectl.Subcommand) bool {
_, found := unsupported[sc]
return !found
}
Comment on lines +71 to 78
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changing this from a slice to a map does have performance implications.

When benchmarking, a slice was as expected faster when looking up the first element in the list, but the map approach was actually faster when looking up the last element.

$ go test -bench=. ./command -benchtime=5s
goos: linux
goarch: amd64
pkg: github.com/kubecolor/kubecolor/command
cpu: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
BenchmarkIsColoringSupported_rsh-8         	489333993	        16.41 ns/op
BenchmarkIsColoringSupportedMap_rsh-8      	531382500	        13.78 ns/op
BenchmarkIsColoringSupported_attach-8      	1000000000	         4.193 ns/op
BenchmarkIsColoringSupportedMap_attach-8   	680426997	         9.031 ns/op
PASS
ok  	github.com/kubecolor/kubecolor/command	29.554s

However the code is way smaller and in my opinion the benefit of the clean code wins over the cost of some nanoseconds (btw a nanosecond is 0.000000001 seconds)

212 changes: 107 additions & 105 deletions kubectl/subcommand.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,117 +24,119 @@ const (
Yaml
)

type Subcommand int
type Subcommand string

const (
Create Subcommand = iota + 1
Expose
Run
Set
Explain
Get
Edit
Delete
Rollout
Scale
Autoscale
Certificate
ClusterInfo
Top
Cordon
Uncordon
Drain
Taint
Describe
Logs
Attach
Exec
PortForward
Proxy
Cp
Auth
Diff
Apply
Patch
Replace
Wait
Convert
Kustomize
Label
Annotate
Completion
APIResources
APIVersions
Config
Plugin
Version
Options
Ctx
Ns
Debug
KubectlPlugin
Events
Unknown Subcommand = ""
KubectlPlugin Subcommand = "(plugin)"

APIResources Subcommand = "api-resources"
APIVersions Subcommand = "api-versions"
Annotate Subcommand = "annotate"
Apply Subcommand = "apply"
Attach Subcommand = "attach"
Auth Subcommand = "auth"
Autoscale Subcommand = "autoscale"
Certificate Subcommand = "certificate"
ClusterInfo Subcommand = "cluster-info"
Completion Subcommand = "completion"
Config Subcommand = "config"
Convert Subcommand = "convert"
Cordon Subcommand = "cordon"
Cp Subcommand = "cp"
Create Subcommand = "create"
Ctx Subcommand = "ctx"
Debug Subcommand = "debug"
Delete Subcommand = "delete"
Describe Subcommand = "describe"
Diff Subcommand = "diff"
Drain Subcommand = "drain"
Edit Subcommand = "edit"
Events Subcommand = "events"
Exec Subcommand = "exec"
Explain Subcommand = "explain"
Expose Subcommand = "expose"
Get Subcommand = "get"
Kustomize Subcommand = "kustomize"
Label Subcommand = "label"
Logs Subcommand = "logs"
Ns Subcommand = "ns"
Options Subcommand = "options"
Patch Subcommand = "patch"
Plugin Subcommand = "plugin"
PortForward Subcommand = "port-forward"
Proxy Subcommand = "proxy"
Replace Subcommand = "replace"
Rollout Subcommand = "rollout"
Run Subcommand = "run"
Scale Subcommand = "scale"
Set Subcommand = "set"
Taint Subcommand = "taint"
Top Subcommand = "top"
Uncordon Subcommand = "uncordon"
Version Subcommand = "version"
Wait Subcommand = "wait"

// oc (OpenShift CLI) specific subcommands
Rsh Subcommand = "rsh"
)

var strToSubcommand = map[string]Subcommand{
"create": Create,
"expose": Expose,
"run": Run,
"set": Set,
"explain": Explain,
"get": Get,
"edit": Edit,
"delete": Delete,
"rollout": Rollout,
"scale": Scale,
"autoscale": Autoscale,
"certificate": Certificate,
"cluster-info": ClusterInfo,
"top": Top,
"cordon": Cordon,
"uncordon": Uncordon,
"drain": Drain,
"taint": Taint,
"describe": Describe,
"logs": Logs,
"attach": Attach,
"exec": Exec,
"port-forward": PortForward,
"proxy": Proxy,
"cp": Cp,
"auth": Auth,
"diff": Diff,
"apply": Apply,
"patch": Patch,
"replace": Replace,
"wait": Wait,
"convert": Convert,
"kustomize": Kustomize,
"label": Label,
"annotate": Annotate,
"completion": Completion,
"api-resources": APIResources,
"api-versions": APIVersions,
"config": Config,
"plugin": Plugin,
"version": Version,
"options": Options,
"ctx": Ctx,
"ns": Ns,
"debug": Debug,
"events": Events,
}

func InspectSubcommand(command string) (Subcommand, bool) {
if sc, ok := strToSubcommand[command]; ok {
return sc, true
}

if _, err := exec.LookPath("kubectl-" + command); err == nil {
return KubectlPlugin, true
switch Subcommand(command) {
case
APIResources,
APIVersions,
Annotate,
Apply,
Attach,
Auth,
Autoscale,
Certificate,
ClusterInfo,
Completion,
Config,
Convert,
Cordon,
Cp,
Create,
Ctx,
Debug,
Delete,
Describe,
Diff,
Drain,
Edit,
Events,
Exec,
Explain,
Expose,
Get,
Kustomize,
Label,
Logs,
Ns,
Options,
Patch,
Plugin,
PortForward,
Proxy,
Replace,
Rollout,
Run,
Scale,
Set,
Taint,
Top,
Uncordon,
Version,
Wait:
return Subcommand(command), true
default:
if _, err := exec.LookPath("kubectl-" + command); err == nil {
return KubectlPlugin, true
}
return Unknown, false
}

return 0, false
}

func CollectCommandlineOptions(args []string, info *SubcommandInfo) {
Expand Down
0