(dockerCli *command.DockerCli)
| 134 | } |
| 135 | |
| 136 | func newDockerCommand(dockerCli *command.DockerCli) *cli.TopLevelCommand { |
| 137 | var ( |
| 138 | opts *cliflags.ClientOptions |
| 139 | helpCmd *cobra.Command |
| 140 | ) |
| 141 | |
| 142 | cmd := &cobra.Command{ |
| 143 | Use: "docker [OPTIONS] COMMAND [ARG...]", |
| 144 | Short: "A self-sufficient runtime for containers", |
| 145 | SilenceUsage: true, |
| 146 | SilenceErrors: true, |
| 147 | TraverseChildren: true, |
| 148 | RunE: func(cmd *cobra.Command, args []string) error { |
| 149 | if len(args) == 0 { |
| 150 | return command.ShowHelp(dockerCli.Err())(cmd, args) |
| 151 | } |
| 152 | return fmt.Errorf("docker: unknown command: docker %s\n\nRun 'docker --help' for more information", args[0]) |
| 153 | }, |
| 154 | PersistentPreRunE: func(cmd *cobra.Command, args []string) error { |
| 155 | return isSupported(cmd, dockerCli) |
| 156 | }, |
| 157 | Version: fmt.Sprintf("%s, build %s", version.Version, version.GitCommit), |
| 158 | DisableFlagsInUseLine: true, |
| 159 | CompletionOptions: cobra.CompletionOptions{ |
| 160 | DisableDefaultCmd: false, |
| 161 | HiddenDefaultCmd: true, |
| 162 | DisableDescriptions: os.Getenv("DOCKER_CLI_DISABLE_COMPLETION_DESCRIPTION") != "", |
| 163 | }, |
| 164 | } |
| 165 | |
| 166 | // Disable file-completion by default. Most commands and flags should not |
| 167 | // complete with filenames. |
| 168 | cmd.CompletionOptions.SetDefaultShellCompDirective(cobra.ShellCompDirectiveNoFileComp) |
| 169 | |
| 170 | cmd.SetIn(dockerCli.In()) |
| 171 | cmd.SetOut(dockerCli.Out()) |
| 172 | cmd.SetErr(dockerCli.Err()) |
| 173 | |
| 174 | opts, helpCmd = cli.SetupRootCommand(cmd) |
| 175 | |
| 176 | // TODO(thaJeztah): move configuring completion for these flags to where the flags are added. |
| 177 | _ = cmd.RegisterFlagCompletionFunc("context", completeContextNames(dockerCli)) |
| 178 | _ = cmd.RegisterFlagCompletionFunc("log-level", completeLogLevels) |
| 179 | |
| 180 | cmd.Flags().BoolP("version", "v", false, "Print version information and quit") |
| 181 | setFlagErrorFunc(dockerCli, cmd) |
| 182 | |
| 183 | setupHelpCommand(dockerCli, cmd, helpCmd) |
| 184 | setHelpFunc(dockerCli, cmd) |
| 185 | |
| 186 | cmd.SetOut(dockerCli.Out()) |
| 187 | commands.AddCommands(cmd, dockerCli) |
| 188 | |
| 189 | visitAll(cmd, setValidateArgs(dockerCli)) |
| 190 | |
| 191 | // flags must be the top-level command flags, not cmd.Flags() |
| 192 | return cli.NewTopLevelCommand(cmd, dockerCli, opts, cmd.Flags()) |
| 193 | } |
searching dependent graphs…