Skip to content

Commit ad2bfad

Browse files
committed
review comments
1 parent 98a11da commit ad2bfad

File tree

4 files changed

+13
-45
lines changed

4 files changed

+13
-45
lines changed

v1/daemon/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ go_library(
1818
"//v1/tarball:go_default_library",
1919
"//vendor/github.com/docker/docker/api/types:go_default_library",
2020
"//vendor/github.com/docker/docker/client:go_default_library",
21+
"//vendor/github.com/pkg/errors:go_default_library",
2122
],
2223
)
2324

v1/daemon/write.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,19 @@ type WriteOptions struct {
4646
}
4747

4848
// Write saves the image into the daemon as the given reference.
49-
func Write(ref name.Reference, img v1.Image, wo WriteOptions) (string, error) {
49+
func Write(tag name.Tag, img v1.Image, wo WriteOptions) (string, error) {
5050
cli, err := getImageLoader()
5151
if err != nil {
5252
return "", err
5353
}
5454

55-
tag, err := name.NewTag(ref.Name(), name.WeakValidation)
56-
if err != nil {
57-
return "", err
58-
}
55+
pr, pw := io.Pipe()
56+
go func() {
57+
pw.CloseWithError(tarball.Write(tag, img, &tarball.WriteOptions{}, pw))
58+
}()
59+
5960
// write the image in docker save format first, then load it
60-
reader := tarball.Write(tag, img, &tarball.WriteOptions{})
61-
resp, err := cli.ImageLoad(context.Background(), reader, false)
61+
resp, err := cli.ImageLoad(context.Background(), pr, false)
6262
defer resp.Body.Close()
6363
b, readErr := ioutil.ReadAll(resp.Body)
6464
response := string(b)

v1/daemon/write_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ func TestWriteImage(t *testing.T) {
2727
if err != nil {
2828
t.Errorf("Error loading image: %v", err.Error())
2929
}
30-
imageName, err := name.ParseReference("test_image_2:latest", name.WeakValidation)
30+
tag, err := name.NewTag("test_image_2:latest", name.WeakValidation)
3131
if err != nil {
3232
t.Errorf(err.Error())
3333
}
34-
response, err := Write(imageName, image, WriteOptions{})
34+
response, err := Write(tag, image, WriteOptions{})
3535
if err != nil {
3636
t.Errorf("Error writing image tar: %s", err.Error())
3737
}

v1/tarball/write.go

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -32,57 +32,24 @@ type WriteOptions struct {
3232
// TODO(mattmoor): Whether to store things compressed?
3333
}
3434

35-
// Write writes the image at the given tag to a tarball,
36-
// and returns it through a reader to be consumed
37-
func Write(tag name.Tag, img v1.Image, wo *WriteOptions) io.ReadCloser {
38-
pr, pw := io.Pipe()
39-
40-
go func() {
41-
// Close the writer with any errors encountered.
42-
// These errors will be returned by the reader end
43-
// on subsequent reads. If err == nil, the reader will return
44-
// EOF.
45-
pw.CloseWithError(write(tag, img, wo, pw))
46-
}()
47-
48-
return pr
49-
}
50-
5135
// WriteToFile writes in the compressed format to a tarball, on disk.
36+
// This is just syntactic sugar wrapping tarball.Write with a new file.
5237
func WriteToFile(p string, tag name.Tag, img v1.Image, wo *WriteOptions) error {
5338
w, err := os.Create(p)
5439
if err != nil {
5540
return err
5641
}
5742
defer w.Close()
5843

59-
tf := tar.NewWriter(w)
60-
defer tf.Close()
61-
62-
tr := tar.NewReader(Write(tag, img, wo))
63-
for {
64-
header, err := tr.Next()
65-
if err == io.EOF {
66-
break
67-
}
68-
if err != nil {
69-
return err
70-
}
71-
tf.WriteHeader(header)
72-
_, err = io.Copy(tf, tr)
73-
if err != nil {
74-
return err
75-
}
76-
}
77-
return nil
44+
return Write(tag, img, wo, w)
7845
}
7946

8047
// Write in the compressed format.
8148
// Return a reader for contents of a tarball, containing:
8249
// One manifest.json file at the top level containing information about several images.
8350
// One file for each layer, named after the layer's SHA.
8451
// One file for the config blob, named after its SHA.
85-
func write(tag name.Tag, img v1.Image, wo *WriteOptions, w io.Writer) error {
52+
func Write(tag name.Tag, img v1.Image, wo *WriteOptions, w io.Writer) error {
8653
tf := tar.NewWriter(w)
8754
defer tf.Close()
8855

0 commit comments

Comments
 (0)