diff --git a/api/client/commands.go b/api/client/commands.go index 4e8259914f..8882e2c1e6 100644 --- a/api/client/commands.go +++ b/api/client/commands.go @@ -8,7 +8,6 @@ func (cli *DockerCli) Command(name string) func(...string) error { "exec": cli.CmdExec, "info": cli.CmdInfo, "inspect": cli.CmdInspect, - "load": cli.CmdLoad, "login": cli.CmdLogin, "logout": cli.CmdLogout, "ps": cli.CmdPs, diff --git a/api/client/image/load.go b/api/client/image/load.go new file mode 100644 index 0000000000..240362d1e7 --- /dev/null +++ b/api/client/image/load.go @@ -0,0 +1,67 @@ +package image + +import ( + "io" + "os" + + "golang.org/x/net/context" + + "github.com/docker/docker/api/client" + "github.com/docker/docker/cli" + "github.com/docker/docker/pkg/jsonmessage" + "github.com/spf13/cobra" +) + +type loadOptions struct { + input string + quiet bool +} + +// NewLoadCommand creates a new `docker load` command +func NewLoadCommand(dockerCli *client.DockerCli) *cobra.Command { + var opts loadOptions + + cmd := &cobra.Command{ + Use: "load [OPTIONS]", + Short: "Load an image from a tar archive or STDIN", + Args: cli.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + return runLoad(dockerCli, opts) + }, + } + + flags := cmd.Flags() + + flags.StringVarP(&opts.input, "input", "i", "", "Read from tar archive file, instead of STDIN") + flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Suppress the load output") + + return cmd +} + +func runLoad(dockerCli *client.DockerCli, opts loadOptions) error { + + var input io.Reader = dockerCli.In() + if opts.input != "" { + file, err := os.Open(opts.input) + if err != nil { + return err + } + defer file.Close() + input = file + } + if !dockerCli.IsTerminalOut() { + opts.quiet = true + } + response, err := dockerCli.Client().ImageLoad(context.Background(), input, opts.quiet) + if err != nil { + return err + } + defer response.Body.Close() + + if response.Body != nil && response.JSON { + return jsonmessage.DisplayJSONMessagesStream(response.Body, dockerCli.Out(), dockerCli.OutFd(), dockerCli.IsTerminalOut(), nil) + } + + _, err = io.Copy(dockerCli.Out(), response.Body) + return err +} diff --git a/api/client/load.go b/api/client/load.go deleted file mode 100644 index 820fdc0ef6..0000000000 --- a/api/client/load.go +++ /dev/null @@ -1,50 +0,0 @@ -package client - -import ( - "io" - "os" - - "golang.org/x/net/context" - - Cli "github.com/docker/docker/cli" - "github.com/docker/docker/pkg/jsonmessage" - flag "github.com/docker/docker/pkg/mflag" -) - -// CmdLoad loads an image from a tar archive. -// -// The tar archive is read from STDIN by default, or from a tar archive file. -// -// Usage: docker load [OPTIONS] -func (cli *DockerCli) CmdLoad(args ...string) error { - cmd := Cli.Subcmd("load", nil, Cli.DockerCommands["load"].Description, true) - infile := cmd.String([]string{"i", "-input"}, "", "Read from a tar archive file, instead of STDIN") - quiet := cmd.Bool([]string{"q", "-quiet"}, false, "Suppress the load output") - cmd.Require(flag.Exact, 0) - cmd.ParseFlags(args, true) - - var input io.Reader = cli.in - if *infile != "" { - file, err := os.Open(*infile) - if err != nil { - return err - } - defer file.Close() - input = file - } - if !cli.isTerminalOut { - *quiet = true - } - response, err := cli.client.ImageLoad(context.Background(), input, *quiet) - if err != nil { - return err - } - defer response.Body.Close() - - if response.Body != nil && response.JSON { - return jsonmessage.DisplayJSONMessagesStream(response.Body, cli.out, cli.outFd, cli.isTerminalOut, nil) - } - - _, err = io.Copy(cli.out, response.Body) - return err -} diff --git a/cli/cobraadaptor/adaptor.go b/cli/cobraadaptor/adaptor.go index 11b821cc44..c5fcac0698 100644 --- a/cli/cobraadaptor/adaptor.go +++ b/cli/cobraadaptor/adaptor.go @@ -56,6 +56,7 @@ func NewCobraAdaptor(clientFlags *cliflags.ClientFlags) CobraAdaptor { image.NewBuildCommand(dockerCli), image.NewHistoryCommand(dockerCli), image.NewImagesCommand(dockerCli), + image.NewLoadCommand(dockerCli), image.NewRemoveCommand(dockerCli), image.NewSearchCommand(dockerCli), image.NewImportCommand(dockerCli), diff --git a/cli/usage.go b/cli/usage.go index e9debf3be7..b6d0439052 100644 --- a/cli/usage.go +++ b/cli/usage.go @@ -13,7 +13,6 @@ var DockerCommandUsage = []Command{ {"exec", "Run a command in a running container"}, {"info", "Display system-wide information"}, {"inspect", "Return low-level information on a container or image"}, - {"load", "Load an image from a tar archive or STDIN"}, {"login", "Log in to a Docker registry"}, {"logout", "Log out from a Docker registry"}, {"ps", "List containers"},