Skip to content

Commit 017b697

Browse files
author
zhouhao
committed
image: replace the extra function
Signed-off-by: zhouhao <[email protected]>
1 parent 6ff2eb1 commit 017b697

File tree

7 files changed

+51
-71
lines changed

7 files changed

+51
-71
lines changed

image/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ import (
3333

3434
type config v1.Image
3535

36-
func findConfig(w walker, d *descriptor) (*config, error) {
36+
func findConfig(w walker, d *v1.Descriptor) (*config, error) {
3737
var c config
38-
cpath := filepath.Join("blobs", d.algo(), d.hash())
38+
cpath := filepath.Join("blobs", string(d.Digest.Algorithm()), d.Digest.Hex())
3939

4040
switch err := w.walk(func(path string, info os.FileInfo, r io.Reader) error {
4141
if info.IsDir() || filepath.Clean(path) != cpath {

image/descriptor.go

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,13 @@ import (
2020
"io"
2121
"os"
2222
"path/filepath"
23-
"strings"
2423

25-
"github.com/opencontainers/go-digest"
2624
"github.com/opencontainers/image-spec/specs-go/v1"
2725
"github.com/pkg/errors"
2826
)
2927

30-
type descriptor v1.Descriptor
31-
32-
func (d *descriptor) algo() string {
33-
pts := strings.SplitN(string(d.Digest), ":", 2)
34-
if len(pts) != 2 {
35-
return ""
36-
}
37-
return pts[0]
38-
}
39-
40-
func (d *descriptor) hash() string {
41-
pts := strings.SplitN(string(d.Digest), ":", 2)
42-
if len(pts) != 2 {
43-
return ""
44-
}
45-
return pts[1]
46-
}
47-
48-
func listReferences(w walker) (map[string]*descriptor, error) {
49-
refs := make(map[string]*descriptor)
28+
func listReferences(w walker) (map[string]*v1.Descriptor, error) {
29+
refs := make(map[string]*v1.Descriptor)
5030
var index v1.ImageIndex
5131

5232
if err := w.walk(func(path string, info os.FileInfo, r io.Reader) error {
@@ -60,7 +40,7 @@ func listReferences(w walker) (map[string]*descriptor, error) {
6040

6141
for i := 0; i < len(index.Manifests); i++ {
6242
if index.Manifests[i].Descriptor.Annotations["org.opencontainers.ref.name"] != "" {
63-
refs[index.Manifests[i].Descriptor.Annotations["org.opencontainers.ref.name"]] = (*descriptor)(&index.Manifests[i].Descriptor)
43+
refs[index.Manifests[i].Descriptor.Annotations["org.opencontainers.ref.name"]] = &index.Manifests[i].Descriptor
6444
}
6545
}
6646

@@ -71,8 +51,8 @@ func listReferences(w walker) (map[string]*descriptor, error) {
7151
return refs, nil
7252
}
7353

74-
func findDescriptor(w walker, name string) (*descriptor, error) {
75-
var d descriptor
54+
func findDescriptor(w walker, name string) (*v1.Descriptor, error) {
55+
var d v1.Descriptor
7656
var index v1.ImageIndex
7757

7858
switch err := w.walk(func(path string, info os.FileInfo, r io.Reader) error {
@@ -86,7 +66,7 @@ func findDescriptor(w walker, name string) (*descriptor, error) {
8666

8767
for i := 0; i < len(index.Manifests); i++ {
8868
if index.Manifests[i].Descriptor.Annotations["org.opencontainers.ref.name"] == name {
89-
d = (descriptor)(index.Manifests[i].Descriptor)
69+
d = index.Manifests[i].Descriptor
9070
return errEOW
9171
}
9272
}
@@ -102,7 +82,7 @@ func findDescriptor(w walker, name string) (*descriptor, error) {
10282
}
10383
}
10484

105-
func (d *descriptor) validate(w walker, mts []string) error {
85+
func validateDescriptor(d *v1.Descriptor, w walker, mts []string) error {
10686
var found bool
10787
for _, mt := range mts {
10888
if d.MediaType == mt {
@@ -114,13 +94,12 @@ func (d *descriptor) validate(w walker, mts []string) error {
11494
return fmt.Errorf("invalid descriptor MediaType %q", d.MediaType)
11595
}
11696

117-
parsed, err := digest.Parse(string(d.Digest))
118-
if err != nil {
97+
if err := d.Digest.Validate(); err != nil {
11998
return err
12099
}
121100

122101
// Copy the contents of the layer in to the verifier
123-
verifier := parsed.Verifier()
102+
verifier := d.Digest.Verifier()
124103
numBytes, err := w.get(*d, verifier)
125104
if err != nil {
126105
return err

image/image.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func validate(w walker, refs []string, out *log.Logger) error {
8484
return fmt.Errorf("reference %s not found", ref)
8585
}
8686

87-
if err = d.validate(w, validRefMediaTypes); err != nil {
87+
if err = validateDescriptor(d, w, validRefMediaTypes); err != nil {
8888
return err
8989
}
9090

@@ -135,7 +135,7 @@ func unpack(w walker, dest, refName string) error {
135135
return err
136136
}
137137

138-
if err = ref.validate(w, validRefMediaTypes); err != nil {
138+
if err = validateDescriptor(ref, w, validRefMediaTypes); err != nil {
139139
return err
140140
}
141141

@@ -183,7 +183,7 @@ func createRuntimeBundle(w walker, dest, refName, rootfs string) error {
183183
return err
184184
}
185185

186-
if err = ref.validate(w, validRefMediaTypes); err != nil {
186+
if err = validateDescriptor(ref, w, validRefMediaTypes); err != nil {
187187
return err
188188
}
189189

image/image_test.go

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ func createLayoutFile(root string) error {
238238
return err
239239
}
240240

241-
func createIndexFile(root string, mft descriptor) error {
241+
func createIndexFile(root string, mft v1.Descriptor) error {
242242
indexpath := filepath.Join(root, "index.json")
243243
f, err := os.Create(indexpath)
244244
if err != nil {
@@ -251,48 +251,48 @@ func createIndexFile(root string, mft descriptor) error {
251251
return err
252252
}
253253

254-
func createManifestFile(root, str string) (descriptor, error) {
254+
func createManifestFile(root, str string) (v1.Descriptor, error) {
255255
name := filepath.Join(root, "blobs", "sha256", "test-manifest")
256256
f, err := os.Create(name)
257257
if err != nil {
258-
return descriptor{}, err
258+
return v1.Descriptor{}, err
259259
}
260260
defer f.Close()
261261

262262
_, err = io.Copy(f, bytes.NewBuffer([]byte(str)))
263263
if err != nil {
264-
return descriptor{}, err
264+
return v1.Descriptor{}, err
265265
}
266266

267267
return createHashedBlob(name)
268268
}
269269

270-
func createConfigFile(root, config string) (descriptor, error) {
270+
func createConfigFile(root, config string) (v1.Descriptor, error) {
271271
name := filepath.Join(root, "blobs", "sha256", "test-config")
272272
f, err := os.Create(name)
273273
if err != nil {
274-
return descriptor{}, err
274+
return v1.Descriptor{}, err
275275
}
276276
defer f.Close()
277277

278278
_, err = io.Copy(f, bytes.NewBuffer([]byte(config)))
279279
if err != nil {
280-
return descriptor{}, err
280+
return v1.Descriptor{}, err
281281
}
282282

283283
return createHashedBlob(name)
284284
}
285285

286-
func createImageLayerFile(root string, list []tarContent) (descriptor, error) {
286+
func createImageLayerFile(root string, list []tarContent) (v1.Descriptor, error) {
287287
name := filepath.Join(root, "blobs", "sha256", "test-layer")
288288
err := createTarBlob(name, list)
289289
if err != nil {
290-
return descriptor{}, err
290+
return v1.Descriptor{}, err
291291
}
292292

293293
desc, err := createHashedBlob(name)
294294
if err != nil {
295-
return descriptor{}, err
295+
return v1.Descriptor{}, err
296296
}
297297

298298
desc.MediaType = v1.MediaTypeImageLayer
@@ -321,40 +321,39 @@ func createTarBlob(name string, list []tarContent) error {
321321
return nil
322322
}
323323

324-
func createHashedBlob(name string) (descriptor, error) {
324+
func createHashedBlob(name string) (v1.Descriptor, error) {
325325
desc, err := newDescriptor(name)
326326
if err != nil {
327-
return descriptor{}, err
327+
return v1.Descriptor{}, err
328328
}
329329

330-
parsed, err := digest.Parse(string(desc.Digest))
331-
if err != nil {
332-
return descriptor{}, err
330+
if err := desc.Digest.Validate(); err != nil {
331+
return v1.Descriptor{}, err
333332
}
334333

335334
// Rename the file to hashed-digest name.
336-
err = os.Rename(name, filepath.Join(filepath.Dir(name), parsed.Hex()))
335+
err = os.Rename(name, filepath.Join(filepath.Dir(name), desc.Digest.Hex()))
337336
if err != nil {
338-
return descriptor{}, err
337+
return v1.Descriptor{}, err
339338
}
340339

341340
return desc, nil
342341
}
343342

344-
func newDescriptor(name string) (descriptor, error) {
343+
func newDescriptor(name string) (v1.Descriptor, error) {
345344
file, err := os.Open(name)
346345
if err != nil {
347-
return descriptor{}, err
346+
return v1.Descriptor{}, err
348347
}
349348
defer file.Close()
350349

351350
digester := digest.SHA256.Digester()
352351
size, err := io.Copy(digester.Hash(), file)
353352
if err != nil {
354-
return descriptor{}, err
353+
return v1.Descriptor{}, err
355354
}
356355

357-
return descriptor{
356+
return v1.Descriptor{
358357
Digest: digester.Digest(),
359358
Size: size,
360359
}, nil

image/manifest.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ import (
3636
)
3737

3838
type manifest struct {
39-
Config descriptor `json:"config"`
40-
Layers []descriptor `json:"layers"`
39+
Config v1.Descriptor `json:"config"`
40+
Layers []v1.Descriptor `json:"layers"`
4141
}
4242

43-
func findManifest(w walker, d *descriptor) (*manifest, error) {
43+
func findManifest(w walker, d *v1.Descriptor) (*manifest, error) {
4444
var m manifest
45-
mpath := filepath.Join("blobs", d.algo(), d.hash())
45+
mpath := filepath.Join("blobs", string(d.Digest.Algorithm()), d.Digest.Hex())
4646

4747
switch err := w.walk(func(path string, info os.FileInfo, r io.Reader) error {
4848
if info.IsDir() || filepath.Clean(path) != mpath {
@@ -74,7 +74,7 @@ func findManifest(w walker, d *descriptor) (*manifest, error) {
7474
}
7575

7676
func (m *manifest) validate(w walker) error {
77-
if err := m.Config.validate(w, []string{v1.MediaTypeImageConfig}); err != nil {
77+
if err := validateDescriptor(&m.Config, w, []string{v1.MediaTypeImageConfig}); err != nil {
7878
return errors.Wrap(err, "config validation failed")
7979
}
8080

@@ -86,7 +86,7 @@ func (m *manifest) validate(w walker) error {
8686
}
8787

8888
for _, d := range m.Layers {
89-
if err := d.validate(w, validLayerMediaTypes); err != nil {
89+
if err := validateDescriptor(&d, w, validLayerMediaTypes); err != nil {
9090
return errors.Wrap(err, "layer validation failed")
9191
}
9292
}
@@ -118,8 +118,8 @@ func (m *manifest) unpack(w walker, dest string) (retErr error) {
118118
return nil
119119
}
120120

121-
dd, err := filepath.Rel(filepath.Join("blobs", d.algo()), filepath.Clean(path))
122-
if err != nil || d.hash() != dd {
121+
dd, err := filepath.Rel(filepath.Join("blobs", string(d.Digest.Algorithm())), filepath.Clean(path))
122+
if err != nil || d.Digest.Hex() != dd {
123123
return nil
124124
}
125125

image/manifest_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
"github.com/Sirupsen/logrus"
2929
"github.com/opencontainers/go-digest"
30+
"github.com/opencontainers/image-spec/specs-go/v1"
3031
"github.com/pkg/errors"
3132

3233
bz2 "github.com/dsnet/compress/bzip2"
@@ -141,7 +142,7 @@ func testUnpackLayer(t *testing.T, compression string, invalid bool) {
141142
}
142143

143144
testManifest := manifest{
144-
Layers: []descriptor{descriptor{
145+
Layers: []v1.Descriptor{v1.Descriptor{
145146
MediaType: mediatype,
146147
Digest: digester.Digest(),
147148
}},
@@ -210,7 +211,7 @@ func TestUnpackLayerRemovePartialyUnpackedFile(t *testing.T) {
210211
}
211212

212213
testManifest := manifest{
213-
Layers: []descriptor{descriptor{
214+
Layers: []v1.Descriptor{v1.Descriptor{
214215
MediaType: "application/vnd.oci.image.layer.v1.tar+gzip",
215216
Digest: digester.Digest(),
216217
}},

image/walker.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"path/filepath"
2323
"sync"
2424

25+
"github.com/opencontainers/image-spec/specs-go/v1"
2526
"github.com/pkg/errors"
2627
)
2728

@@ -40,7 +41,7 @@ type walker interface {
4041

4142
// get will copy an arbitrary blob, defined by desc, in to dst. returns
4243
// the number of bytes copied on success.
43-
get(desc descriptor, dst io.Writer) (int64, error)
44+
get(desc v1.Descriptor, dst io.Writer) (int64, error)
4445
}
4546

4647
// tarWalker exposes access to image layouts in a tar file.
@@ -87,11 +88,11 @@ loop:
8788
return nil
8889
}
8990

90-
func (w *tarWalker) get(desc descriptor, dst io.Writer) (int64, error) {
91+
func (w *tarWalker) get(desc v1.Descriptor, dst io.Writer) (int64, error) {
9192
var bytes int64
9293
done := false
9394

94-
expectedPath := filepath.Join("blobs", desc.algo(), desc.hash())
95+
expectedPath := filepath.Join("blobs", string(desc.Digest.Algorithm()), desc.Digest.Hex())
9596

9697
f := func(path string, info os.FileInfo, rdr io.Reader) error {
9798
var err error
@@ -161,8 +162,8 @@ func (w *pathWalker) walk(f walkFunc) error {
161162
})
162163
}
163164

164-
func (w *pathWalker) get(desc descriptor, dst io.Writer) (int64, error) {
165-
name := filepath.Join(w.root, "blobs", desc.algo(), desc.hash())
165+
func (w *pathWalker) get(desc v1.Descriptor, dst io.Writer) (int64, error) {
166+
name := filepath.Join(w.root, "blobs", string(desc.Digest.Algorithm()), desc.Digest.Hex())
166167

167168
info, err := os.Stat(name)
168169
if err != nil {

0 commit comments

Comments
 (0)