Signed-off-by: Lei Jitang <leijitang@huawei.com>
| ... | ... |
@@ -41,7 +41,7 @@ func (cli *DockerCli) CmdLoad(args ...string) error {
|
| 41 | 41 |
} |
| 42 | 42 |
defer response.Body.Close() |
| 43 | 43 |
|
| 44 |
- if response.JSON {
|
|
| 44 |
+ if response.Body != nil && response.JSON {
|
|
| 45 | 45 |
return jsonmessage.DisplayJSONMessagesStream(response.Body, cli.out, cli.outFd, cli.isTerminalOut, nil) |
| 46 | 46 |
} |
| 47 | 47 |
|
| ... | ... |
@@ -206,7 +206,17 @@ func (s *imageRouter) postImagesLoad(ctx context.Context, w http.ResponseWriter, |
| 206 | 206 |
return err |
| 207 | 207 |
} |
| 208 | 208 |
quiet := httputils.BoolValueOrDefault(r, "quiet", true) |
| 209 |
- w.Header().Set("Content-Type", "application/json")
|
|
| 209 |
+ |
|
| 210 |
+ if !quiet {
|
|
| 211 |
+ w.Header().Set("Content-Type", "application/json")
|
|
| 212 |
+ |
|
| 213 |
+ output := ioutils.NewWriteFlusher(w) |
|
| 214 |
+ defer output.Close() |
|
| 215 |
+ if err := s.backend.LoadImage(r.Body, output, quiet); err != nil {
|
|
| 216 |
+ output.Write(streamformatter.NewJSONStreamFormatter().FormatError(err)) |
|
| 217 |
+ } |
|
| 218 |
+ return nil |
|
| 219 |
+ } |
|
| 210 | 220 |
return s.backend.LoadImage(r.Body, w, quiet) |
| 211 | 221 |
} |
| 212 | 222 |
|
| ... | ... |
@@ -29,6 +29,7 @@ func (l *tarexporter) Load(inTar io.ReadCloser, outStream io.Writer, quiet bool) |
| 29 | 29 |
) |
| 30 | 30 |
if !quiet {
|
| 31 | 31 |
progressOutput = sf.NewProgressOutput(outStream, false) |
| 32 |
+ outStream = &streamformatter.StdoutFormatter{Writer: outStream, StreamFormatter: streamformatter.NewJSONStreamFormatter()}
|
|
| 32 | 33 |
} |
| 33 | 34 |
|
| 34 | 35 |
tmpDir, err := ioutil.TempDir("", "docker-import-")
|
| ... | ... |
@@ -3,6 +3,7 @@ |
| 3 | 3 |
package main |
| 4 | 4 |
|
| 5 | 5 |
import ( |
| 6 |
+ "fmt" |
|
| 6 | 7 |
"io/ioutil" |
| 7 | 8 |
"os" |
| 8 | 9 |
"os/exec" |
| ... | ... |
@@ -65,3 +66,22 @@ func (s *DockerSuite) TestSaveAndLoadRepoStdout(c *check.C) {
|
| 65 | 65 |
c.Assert(err, check.IsNil) //could not read tty output |
| 66 | 66 |
c.Assert(string(buf[:n]), checker.Contains, "Cowardly refusing", check.Commentf("help output is not being yielded", out))
|
| 67 | 67 |
} |
| 68 |
+ |
|
| 69 |
+func (s *DockerSuite) TestSaveAndLoadWithProgressBar(c *check.C) {
|
|
| 70 |
+ name := "test-load" |
|
| 71 |
+ _, err := buildImage(name, ` |
|
| 72 |
+ FROM busybox |
|
| 73 |
+ RUN touch aa |
|
| 74 |
+ `, true) |
|
| 75 |
+ c.Assert(err, check.IsNil) |
|
| 76 |
+ |
|
| 77 |
+ tmptar := name + ".tar" |
|
| 78 |
+ dockerCmd(c, "save", "-o", tmptar, name) |
|
| 79 |
+ defer os.Remove(tmptar) |
|
| 80 |
+ |
|
| 81 |
+ dockerCmd(c, "rmi", name) |
|
| 82 |
+ dockerCmd(c, "tag", "busybox", name) |
|
| 83 |
+ out, _ := dockerCmd(c, "load", "-i", tmptar) |
|
| 84 |
+ expected := fmt.Sprintf("The image %s:latest already exists, renaming the old one with ID", name)
|
|
| 85 |
+ c.Assert(out, checker.Contains, expected) |
|
| 86 |
+} |