Skip to content
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
10 changes: 9 additions & 1 deletion cli/cobra.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ func setupCommonRootCommand(rootCmd *cobra.Command) (*cliflags.ClientOptions, *p
opts.Common.InstallFlags(flags)

cobra.AddTemplateFunc("add", func(a, b int) int { return a + b })
cobra.AddTemplateFunc("hasAliases", hasAliases)
cobra.AddTemplateFunc("hasSubCommands", hasSubCommands)
cobra.AddTemplateFunc("hasTopCommands", hasTopCommands)
cobra.AddTemplateFunc("hasManagementSubCommands", hasManagementSubCommands)
Expand Down Expand Up @@ -239,6 +240,10 @@ func isPlugin(cmd *cobra.Command) bool {
return cmd.Annotations[pluginmanager.CommandAnnotationPlugin] == "true"
}

func hasAliases(cmd *cobra.Command) bool {
return len(cmd.Aliases) > 0 || cmd.Annotations["aliases"] != ""
}

func hasSubCommands(cmd *cobra.Command) bool {
return len(operationSubCommands(cmd)) > 0
}
Expand All @@ -263,6 +268,9 @@ func hasTopCommands(cmd *cobra.Command) bool {
// formatted as the full command as they're called (contrary to the default
// Aliases function, which only returns the subcommand).
func commandAliases(cmd *cobra.Command) string {
if cmd.Annotations["aliases"] != "" {
Copy link
Member

@crazy-max crazy-max Jun 28, 2022

Choose a reason for hiding this comment

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

Should we expose the "aliases" annotation name in cobra pkg to be used in cli plugins projects? Pretty much like https://github.com/docker/cli-docs-tool/blob/main/annotation/annotation.go?

Copy link
Member Author

Choose a reason for hiding this comment

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

Hm.. yes, so was a bit on the fence where to define it, as it's not "just" docs of course (we're also using it for the cli usage output).

Perhaps we should define a list of consts for annotations though. Was also thinking "should it have a prefix", but we already have used (e.g.) version for a long time, so I think that ship has sailed.

Copy link
Member

Choose a reason for hiding this comment

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

Ah yes indeed there is the cli usage output

return cmd.Annotations["aliases"]
}
var parentPath string
if cmd.HasParent() {
parentPath = cmd.Parent().CommandPath() + " "
Expand Down Expand Up @@ -411,7 +419,7 @@ EXPERIMENTAL:
https://docs.docker.com/go/experimental/

{{- end}}
{{- if gt .Aliases 0}}
{{- if hasAliases . }}

Aliases:
{{ commandAliases . }}
Expand Down
9 changes: 9 additions & 0 deletions cli/cobra_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,18 @@ func TestInvalidPlugin(t *testing.T) {
func TestCommandAliases(t *testing.T) {
root := &cobra.Command{Use: "root"}
sub := &cobra.Command{Use: "subcommand", Aliases: []string{"alias1", "alias2"}}
sub2 := &cobra.Command{Use: "subcommand2", Annotations: map[string]string{"aliases": "root foo, root bar"}}
root.AddCommand(sub)
root.AddCommand(sub2)

assert.Equal(t, hasAliases(sub), true)
assert.Equal(t, commandAliases(sub), "root subcommand, root alias1, root alias2")
assert.Equal(t, hasAliases(sub2), true)
assert.Equal(t, commandAliases(sub2), "root foo, root bar")

sub.Annotations = map[string]string{"aliases": "custom alias, custom alias 2"}
assert.Equal(t, hasAliases(sub), true)
assert.Equal(t, commandAliases(sub), "custom alias, custom alias 2")
}

func TestDecoratedName(t *testing.T) {
Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/attach.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ func NewAttachCommand(dockerCli command.Cli) *cobra.Command {
opts.container = args[0]
return runAttach(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container attach, docker attach",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(container types.Container) bool {
return container.State != "paused"
}),
Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/commit.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ func NewCommitCommand(dockerCli command.Cli) *cobra.Command {
}
return runCommit(dockerCli, &options)
},
Annotations: map[string]string{
"aliases": "docker container commit, docker commit",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/cp.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ func NewCopyCommand(dockerCli command.Cli) *cobra.Command {
}
return runCopy(dockerCli, opts)
},
Annotations: map[string]string{
"aliases": "docker container cp, docker cp",
},
}

flags := cmd.Flags()
Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ func NewCreateCommand(dockerCli command.Cli) *cobra.Command {
}
return runCreate(dockerCli, cmd.Flags(), &options, copts)
},
Annotations: map[string]string{
"aliases": "docker container create, docker create",
},
ValidArgsFunction: completion.ImageNames(dockerCli),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ func NewDiffCommand(dockerCli command.Cli) *cobra.Command {
opts.container = args[0]
return runDiff(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container diff, docker diff",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
}
}
Expand Down
1 change: 1 addition & 0 deletions cli/command/container/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ func NewExecCommand(dockerCli command.Cli) *cobra.Command {
}),
Annotations: map[string]string{
"category-top": "2",
"aliases": "docker container exec, docker exec",
},
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ func NewExportCommand(dockerCli command.Cli) *cobra.Command {
opts.container = args[0]
return runExport(dockerCli, opts)
},
Annotations: map[string]string{
"aliases": "docker container export, docker export",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, true),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/kill.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ func NewKillCommand(dockerCli command.Cli) *cobra.Command {
opts.containers = args
return runKill(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container kill, docker kill",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
}

Expand Down
1 change: 1 addition & 0 deletions cli/command/container/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ func NewPsCommand(dockerCli command.Cli) *cobra.Command {
},
Annotations: map[string]string{
"category-top": "3",
"aliases": "docker container ls, docker container list, docker container ps, docker ps",
},
ValidArgsFunction: completion.NoComplete,
}
Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ func NewLogsCommand(dockerCli command.Cli) *cobra.Command {
opts.container = args[0]
return runLogs(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container logs, docker logs",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, true),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/pause.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ func NewPauseCommand(dockerCli command.Cli) *cobra.Command {
opts.containers = args
return runPause(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container pause, docker pause",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(container types.Container) bool {
return container.State != "paused"
}),
Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/port.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ func NewPortCommand(dockerCli command.Cli) *cobra.Command {
}
return runPort(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container port, docker port",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
}
return cmd
Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/rename.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ func NewRenameCommand(dockerCli command.Cli) *cobra.Command {
opts.newName = args[1]
return runRename(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container rename, docker rename",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, true),
}
return cmd
Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/restart.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ func NewRestartCommand(dockerCli command.Cli) *cobra.Command {
opts.timeoutChanged = cmd.Flags().Changed("time")
return runRestart(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container restart, docker restart",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, true),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/rm.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ func NewRmCommand(dockerCli command.Cli) *cobra.Command {
opts.containers = args
return runRm(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container rm, docker rm",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, true),
}

Expand Down
1 change: 1 addition & 0 deletions cli/command/container/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ func NewRunCommand(dockerCli command.Cli) *cobra.Command {
ValidArgsFunction: completion.ImageNames(dockerCli),
Annotations: map[string]string{
"category-top": "1",
"aliases": "docker container run, docker run",
},
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ func NewStartCommand(dockerCli command.Cli) *cobra.Command {
opts.Containers = args
return RunStart(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container start, docker start",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, true, func(container types.Container) bool {
return container.State == "exited" || container.State == "created"
}),
Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/stats.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ func NewStatsCommand(dockerCli command.Cli) *cobra.Command {
opts.containers = args
return runStats(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container stats, docker stats",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/stop.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ func NewStopCommand(dockerCli command.Cli) *cobra.Command {
opts.timeoutChanged = cmd.Flags().Changed("time")
return runStop(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container stop, docker stop",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/top.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ func NewTopCommand(dockerCli command.Cli) *cobra.Command {
opts.args = args[1:]
return runTop(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container top, docker top",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/unpause.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ func NewUnpauseCommand(dockerCli command.Cli) *cobra.Command {
opts.containers = args
return runUnpause(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container unpause, docker unpause",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(container types.Container) bool {
return container.State == "paused"
}),
Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ func NewUpdateCommand(dockerCli command.Cli) *cobra.Command {
options.nFlag = cmd.Flags().NFlag()
return runUpdate(dockerCli, &options)
},
Annotations: map[string]string{
"aliases": "docker container update, docker update",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, true),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/container/wait.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ func NewWaitCommand(dockerCli command.Cli) *cobra.Command {
opts.containers = args
return runWait(dockerCli, &opts)
},
Annotations: map[string]string{
"aliases": "docker container wait, docker wait",
},
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
}

Expand Down
1 change: 1 addition & 0 deletions cli/command/image/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ func NewBuildCommand(dockerCli command.Cli) *cobra.Command {
},
Annotations: map[string]string{
"category-top": "4",
"aliases": "docker image build, docker build, docker buildx build, docker builder build",
},
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return nil, cobra.ShellCompDirectiveFilterDirs
Expand Down
3 changes: 3 additions & 0 deletions cli/command/image/history.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ func NewHistoryCommand(dockerCli command.Cli) *cobra.Command {
opts.image = args[0]
return runHistory(dockerCli, opts)
},
Annotations: map[string]string{
"aliases": "docker image history, docker history",
},
}

flags := cmd.Flags()
Expand Down
3 changes: 3 additions & 0 deletions cli/command/image/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ func NewImportCommand(dockerCli command.Cli) *cobra.Command {
}
return runImport(dockerCli, options)
},
Annotations: map[string]string{
"aliases": "docker image import, docker import",
},
}

flags := cmd.Flags()
Expand Down
1 change: 1 addition & 0 deletions cli/command/image/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ func NewImagesCommand(dockerCli command.Cli) *cobra.Command {
},
Annotations: map[string]string{
"category-top": "7",
"aliases": "docker image ls, docker image list, docker images",
},
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/image/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ func NewLoadCommand(dockerCli command.Cli) *cobra.Command {
RunE: func(cmd *cobra.Command, args []string) error {
return runLoad(dockerCli, opts)
},
Annotations: map[string]string{
"aliases": "docker image load, docker load",
},
ValidArgsFunction: completion.NoComplete,
}

Expand Down
1 change: 1 addition & 0 deletions cli/command/image/pull.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ func NewPullCommand(dockerCli command.Cli) *cobra.Command {
},
Annotations: map[string]string{
"category-top": "5",
"aliases": "docker image pull, docker pull",
},
ValidArgsFunction: completion.NoComplete,
}
Expand Down
1 change: 1 addition & 0 deletions cli/command/image/push.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ func NewPushCommand(dockerCli command.Cli) *cobra.Command {
},
Annotations: map[string]string{
"category-top": "6",
"aliases": "docker image push, docker push",
},
ValidArgsFunction: completion.ImageNames(dockerCli),
}
Expand Down
3 changes: 3 additions & 0 deletions cli/command/image/remove.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ func NewRemoveCommand(dockerCli command.Cli) *cobra.Command {
RunE: func(cmd *cobra.Command, args []string) error {
return runRemove(dockerCli, opts, args)
},
Annotations: map[string]string{
"aliases": "docker image rm, docker image remove, docker rmi",
},
}

flags := cmd.Flags()
Expand Down
3 changes: 3 additions & 0 deletions cli/command/image/save.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ func NewSaveCommand(dockerCli command.Cli) *cobra.Command {
opts.images = args
return RunSave(dockerCli, opts)
},
Annotations: map[string]string{
"aliases": "docker image save, docker save",
},
ValidArgsFunction: completion.ImageNames(dockerCli),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/image/tag.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ func NewTagCommand(dockerCli command.Cli) *cobra.Command {
opts.name = args[1]
return runTag(dockerCli, opts)
},
Annotations: map[string]string{
"aliases": "docker image tag, docker tag",
},
ValidArgsFunction: completion.ImageNames(dockerCli),
}

Expand Down
3 changes: 3 additions & 0 deletions cli/command/system/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ func NewEventsCommand(dockerCli command.Cli) *cobra.Command {
RunE: func(cmd *cobra.Command, args []string) error {
return runEvents(dockerCli, &options)
},
Annotations: map[string]string{
"aliases": "docker system events, docker events",
},
ValidArgsFunction: completion.NoComplete,
}

Expand Down
1 change: 1 addition & 0 deletions cli/command/system/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ func NewInfoCommand(dockerCli command.Cli) *cobra.Command {
},
Annotations: map[string]string{
"category-top": "12",
"aliases": "docker system info, docker info",
},
ValidArgsFunction: completion.NoComplete,
}
Expand Down
Loading