Skip to content

Commit 9fd2c0f

Browse files
committed
Make docker load to output json when the response content type is json.
Signed-off-by: David Calavera <[email protected]>
1 parent eacedcb commit 9fd2c0f

4 files changed

Lines changed: 23 additions & 7 deletions

File tree

api/client/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ type apiClient interface {
5353
ImageImport(options types.ImageImportOptions) (io.ReadCloser, error)
5454
ImageInspectWithRaw(imageID string, getSize bool) (types.ImageInspect, []byte, error)
5555
ImageList(options types.ImageListOptions) ([]types.Image, error)
56-
ImageLoad(input io.Reader) (io.ReadCloser, error)
56+
ImageLoad(input io.Reader) (types.ImageLoadResponse, error)
5757
ImagePull(options types.ImagePullOptions, privilegeFunc lib.RequestPrivilegeFunc) (io.ReadCloser, error)
5858
ImagePush(options types.ImagePushOptions, privilegeFunc lib.RequestPrivilegeFunc) (io.ReadCloser, error)
5959
ImageRemove(options types.ImageRemoveOptions) ([]types.ImageDelete, error)

api/client/lib/image_load.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@ package lib
33
import (
44
"io"
55
"net/url"
6+
7+
"github.com/docker/docker/api/types"
68
)
79

810
// ImageLoad loads an image in the docker host from the client host.
911
// It's up to the caller to close the io.ReadCloser returned by
1012
// this function.
11-
func (cli *Client) ImageLoad(input io.Reader) (io.ReadCloser, error) {
13+
func (cli *Client) ImageLoad(input io.Reader) (types.ImageLoadResponse, error) {
1214
resp, err := cli.postRaw("/images/load", url.Values{}, input, nil)
1315
if err != nil {
14-
return nil, err
16+
return types.ImageLoadResponse{}, err
1517
}
16-
return resp.body, nil
18+
return types.ImageLoadResponse{
19+
Body: resp.body,
20+
JSON: resp.header.Get("Content-Type") == "application/json",
21+
}, nil
1722
}

api/client/load.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"os"
66

77
Cli "github.com/docker/docker/cli"
8+
"github.com/docker/docker/pkg/jsonmessage"
89
flag "github.com/docker/docker/pkg/mflag"
910
)
1011

@@ -29,12 +30,16 @@ func (cli *DockerCli) CmdLoad(args ...string) error {
2930
input = file
3031
}
3132

32-
responseBody, err := cli.client.ImageLoad(input)
33+
response, err := cli.client.ImageLoad(input)
3334
if err != nil {
3435
return err
3536
}
36-
defer responseBody.Close()
37+
defer response.Body.Close()
3738

38-
_, err = io.Copy(cli.out, responseBody)
39+
if response.JSON {
40+
return jsonmessage.DisplayJSONMessagesStream(response.Body, cli.out, cli.outFd, cli.isTerminalOut)
41+
}
42+
43+
_, err = io.Copy(cli.out, response.Body)
3944
return err
4045
}

api/types/client.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,12 @@ type ImageListOptions struct {
179179
Filters filters.Args
180180
}
181181

182+
// ImageLoadResponse returns information to the client about a load process.
183+
type ImageLoadResponse struct {
184+
Body io.ReadCloser
185+
JSON bool
186+
}
187+
182188
// ImagePullOptions holds information to pull images.
183189
type ImagePullOptions struct {
184190
ImageID string

0 commit comments

Comments
 (0)