From f30cba0e0e8aeb0d37fc7ae5104e8c9e0ca74484 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Thu, 3 Dec 2015 14:49:41 -0500 Subject: [PATCH] Implement docker export with standalone client lib. Signed-off-by: David Calavera Upstream-commit: e0549b8cebee4dbe8614688767c9b666afdd32d9 Component: engine --- components/engine/api/client/export.go | 13 ++++++------- components/engine/api/client/lib/export.go | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 components/engine/api/client/lib/export.go diff --git a/components/engine/api/client/export.go b/components/engine/api/client/export.go index 2763b7b045..ec94f6728e 100644 --- a/components/engine/api/client/export.go +++ b/components/engine/api/client/export.go @@ -2,6 +2,7 @@ package client import ( "errors" + "io" "os" Cli "github.com/docker/docker/cli" @@ -33,14 +34,12 @@ func (cli *DockerCli) CmdExport(args ...string) error { return errors.New("Cowardly refusing to save to a terminal. Use the -o flag or redirect.") } - image := cmd.Arg(0) - sopts := &streamOpts{ - rawTerminal: true, - out: output, - } - if _, err := cli.stream("GET", "/containers/"+image+"/export", sopts); err != nil { + responseBody, err := cli.client.ContainerExport(cmd.Arg(0)) + if err != nil { return err } + defer responseBody.Close() - return nil + _, err = io.Copy(output, responseBody) + return err } diff --git a/components/engine/api/client/lib/export.go b/components/engine/api/client/lib/export.go new file mode 100644 index 0000000000..6cb4d4a18d --- /dev/null +++ b/components/engine/api/client/lib/export.go @@ -0,0 +1,18 @@ +package lib + +import ( + "io" + "net/url" +) + +// ContainerExport retrieves the raw contents of a container +// and returns them as a io.ReadCloser. It's up to the caller +// to close the stream. +func (cli *Client) ContainerExport(containerID string) (io.ReadCloser, error) { + serverResp, err := cli.GET("/containers/"+containerID+"/export", url.Values{}, nil) + if err != nil { + return nil, err + } + + return serverResp.body, nil +}