Browse code

remove type conversions

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2025/07/04 01:31:04
Showing 22 changed files
... ...
@@ -631,7 +631,7 @@ func (p *puller) Snapshot(ctx context.Context, g session.Group) (cache.Immutable
631 631
 		ongoing.add(desc)
632 632
 		layers = append(layers, &layerDescriptor{
633 633
 			desc:    desc,
634
-			diffID:  layer.DiffID(img.RootFS.DiffIDs[i]),
634
+			diffID:  img.RootFS.DiffIDs[i],
635 635
 			fetcher: fetcher,
636 636
 			ref:     p.src.Reference,
637 637
 			is:      p.is,
... ...
@@ -147,7 +147,7 @@ func (s *snapshotter) chainID(key string) (layer.ChainID, bool) {
147 147
 		if err != nil {
148 148
 			return "", false
149 149
 		}
150
-		return layer.ChainID(dgst), true
150
+		return dgst, true
151 151
 	}
152 152
 	return "", false
153 153
 }
... ...
@@ -1,9 +1,13 @@
1
+// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
2
+//go:build go1.23
3
+
1 4
 package mobyexporter
2 5
 
3 6
 import (
4 7
 	"bytes"
5 8
 	"context"
6 9
 	"fmt"
10
+	"slices"
7 11
 	"strings"
8 12
 
9 13
 	"github.com/containerd/containerd/v2/core/content"
... ...
@@ -151,10 +155,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, inp *exporter.Source
151 151
 			return nil, nil, layersDone(err)
152 152
 		}
153 153
 
154
-		diffs = make([]digest.Digest, len(diffIDs))
155
-		for i := range diffIDs {
156
-			diffs[i] = digest.Digest(diffIDs[i])
157
-		}
154
+		diffs = slices.Clone(diffIDs)
158 155
 
159 156
 		_ = layersDone(nil)
160 157
 	}
... ...
@@ -369,7 +369,7 @@ func (w *Worker) GetRemotes(ctx context.Context, ref cache.ImmutableRef, createI
369 369
 	for i, dgst := range diffIDs {
370 370
 		descriptors[i] = ocispec.Descriptor{
371 371
 			MediaType: c8dimages.MediaTypeDockerSchema2Layer,
372
-			Digest:    digest.Digest(dgst),
372
+			Digest:    dgst,
373 373
 			Size:      -1,
374 374
 		}
375 375
 	}
... ...
@@ -439,7 +439,7 @@ func (w *Worker) FromRemote(ctx context.Context, remote *solver.Remote) (cache.I
439 439
 		// ongoing.add(desc)
440 440
 		layers = append(layers, &layerDescriptor{
441 441
 			desc:     l.Blob,
442
-			diffID:   layer.DiffID(l.Diff.Digest),
442
+			diffID:   l.Diff.Digest,
443 443
 			provider: remote.Provider,
444 444
 			w:        w,
445 445
 			pctx:     ctx,
... ...
@@ -178,7 +178,7 @@ func (l *MockRWLayer) Release() error { return nil }
178 178
 func (l *MockRWLayer) Root() string   { return "" }
179 179
 func (l *MockRWLayer) Commit() (builder.ROLayer, error) {
180 180
 	return &MockROLayer{
181
-		diffID: layer.DiffID(digest.Digest("sha256:1234")),
181
+		diffID: "sha256:1234",
182 182
 	}, nil
183 183
 }
184 184
 
... ...
@@ -159,7 +159,7 @@ func (c cacheAdaptor) Create(parent *image.Image, target image.Image, extraLayer
159 159
 
160 160
 	var layerDigest digest.Digest
161 161
 	if extraLayer != "" {
162
-		info, err := findContentByUncompressedDigest(ctx, c.is.client.ContentStore(), digest.Digest(extraLayer))
162
+		info, err := findContentByUncompressedDigest(ctx, c.is.client.ContentStore(), extraLayer)
163 163
 		if err != nil {
164 164
 			return "", fmt.Errorf("failed to find content for diff ID %q: %w", extraLayer, err)
165 165
 		}
... ...
@@ -387,7 +387,7 @@ func (rw *rwlayer) Commit() (_ builder.ROLayer, outErr error) {
387 387
 		key:                key,
388 388
 		c:                  rw.c,
389 389
 		snapshotter:        rw.snapshotter,
390
-		diffID:             layer.DiffID(diffID),
390
+		diffID:             diffID,
391 391
 		contentStoreDigest: desc.Digest,
392 392
 		lease:              &lease,
393 393
 	}, nil
... ...
@@ -1,13 +1,16 @@
1
+// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
2
+//go:build go1.23
3
+
1 4
 package containerd
2 5
 
3 6
 import (
7
+	"slices"
8
+
4 9
 	"github.com/docker/docker/api/types/container"
5 10
 	"github.com/docker/docker/dockerversion"
6 11
 	"github.com/docker/docker/image"
7
-	"github.com/docker/docker/layer"
8 12
 	"github.com/docker/go-connections/nat"
9 13
 	imagespec "github.com/moby/docker-image-spec/specs-go/v1"
10
-	"github.com/opencontainers/go-digest"
11 14
 	ocispec "github.com/opencontainers/image-spec/specs-go/v1"
12 15
 )
13 16
 
... ...
@@ -27,16 +30,12 @@ func dockerOciImageToDockerImagePartial(id image.ID, img imagespec.DockerOCIImag
27 27
 		Created:       img.Created,
28 28
 	}
29 29
 
30
-	rootFS := &image.RootFS{
31
-		Type: img.RootFS.Type,
32
-	}
33
-	for _, diffId := range img.RootFS.DiffIDs {
34
-		rootFS.DiffIDs = append(rootFS.DiffIDs, layer.DiffID(diffId))
35
-	}
36
-
37 30
 	out := image.NewImage(id)
38 31
 	out.V1Image = v1Image
39
-	out.RootFS = rootFS
32
+	out.RootFS = &image.RootFS{
33
+		Type:    img.RootFS.Type,
34
+		DiffIDs: slices.Clone(img.RootFS.DiffIDs),
35
+	}
40 36
 	out.History = img.History
41 37
 	out.OSFeatures = img.OSFeatures
42 38
 	out.OSVersion = img.OSVersion
... ...
@@ -44,14 +43,6 @@ func dockerOciImageToDockerImagePartial(id image.ID, img imagespec.DockerOCIImag
44 44
 }
45 45
 
46 46
 func dockerImageToDockerOCIImage(img image.Image) imagespec.DockerOCIImage {
47
-	rootfs := ocispec.RootFS{
48
-		Type:    img.RootFS.Type,
49
-		DiffIDs: []digest.Digest{},
50
-	}
51
-	for _, diffId := range img.RootFS.DiffIDs {
52
-		rootfs.DiffIDs = append(rootfs.DiffIDs, digest.Digest(diffId))
53
-	}
54
-
55 47
 	return imagespec.DockerOCIImage{
56 48
 		Image: ocispec.Image{
57 49
 			Created: img.Created,
... ...
@@ -63,7 +54,10 @@ func dockerImageToDockerOCIImage(img image.Image) imagespec.DockerOCIImage {
63 63
 				OSVersion:    img.OSVersion,
64 64
 				OSFeatures:   img.OSFeatures,
65 65
 			},
66
-			RootFS:  rootfs,
66
+			RootFS: ocispec.RootFS{
67
+				Type:    img.RootFS.Type,
68
+				DiffIDs: slices.Clone(img.RootFS.DiffIDs),
69
+			},
67 70
 			History: img.History,
68 71
 		},
69 72
 		Config: containerConfigToDockerOCIImageConfig(img.Config),
... ...
@@ -140,8 +140,7 @@ deleteImagesLoop:
140 140
 	// Compute how much space was freed
141 141
 	for _, d := range rep.ImagesDeleted {
142 142
 		if d.Deleted != "" {
143
-			chid := layer.ChainID(d.Deleted)
144
-			if l, ok := allLayers[chid]; ok {
143
+			if l, ok := allLayers[layer.ChainID(d.Deleted)]; ok {
145 144
 				rep.SpaceReclaimed += uint64(l.DiffSize())
146 145
 			}
147 146
 		}
... ...
@@ -117,7 +117,7 @@ func (serv *v2MetadataService) digestNamespace() string {
117 117
 }
118 118
 
119 119
 func (serv *v2MetadataService) diffIDKey(diffID layer.DiffID) string {
120
-	return string(digest.Digest(diffID).Algorithm()) + "/" + digest.Digest(diffID).Encoded()
120
+	return string(diffID.Algorithm()) + "/" + diffID.Encoded()
121 121
 }
122 122
 
123 123
 func (serv *v2MetadataService) digestKey(dgst digest.Digest) string {
... ...
@@ -145,11 +145,11 @@ func (serv *v2MetadataService) GetMetadata(diffID layer.DiffID) ([]V2Metadata, e
145 145
 // GetDiffID finds a layer DiffID from a digest.
146 146
 func (serv *v2MetadataService) GetDiffID(dgst digest.Digest) (layer.DiffID, error) {
147 147
 	if serv.store == nil {
148
-		return layer.DiffID(""), errors.New("no metadata storage")
148
+		return "", errors.New("no metadata storage")
149 149
 	}
150 150
 	diffIDBytes, err := serv.store.Get(serv.digestNamespace(), serv.digestKey(dgst))
151 151
 	if err != nil {
152
-		return layer.DiffID(""), err
152
+		return "", err
153 153
 	}
154 154
 
155 155
 	return layer.DiffID(diffIDBytes), nil
... ...
@@ -73,13 +73,13 @@ func TestV2MetadataService(t *testing.T) {
73 73
 	}
74 74
 
75 75
 	// Test GetMetadata on a nonexistent entry
76
-	_, err = metadataService.GetMetadata(layer.DiffID("sha256:82379823067823853223359023576437723560923756b03560378f4497753917"))
76
+	_, err = metadataService.GetMetadata("sha256:82379823067823853223359023576437723560923756b03560378f4497753917")
77 77
 	if err == nil {
78 78
 		t.Fatal("expected error looking up nonexistent entry")
79 79
 	}
80 80
 
81 81
 	// Test GetDiffID on a nonexistent entry
82
-	_, err = metadataService.GetDiffID(digest.Digest("sha256:82379823067823853223359023576437723560923756b03560378f4497753917"))
82
+	_, err = metadataService.GetDiffID("sha256:82379823067823853223359023576437723560923756b03560378f4497753917")
83 83
 	if err == nil {
84 84
 		t.Fatal("expected error looking up nonexistent entry")
85 85
 	}
... ...
@@ -15,6 +15,7 @@ import (
15 15
 	"github.com/docker/docker/layer"
16 16
 	"github.com/docker/docker/pkg/progress"
17 17
 	"github.com/opencontainers/go-digest"
18
+	"github.com/opencontainers/image-spec/identity"
18 19
 	"gotest.tools/v3/assert"
19 20
 )
20 21
 
... ...
@@ -63,18 +64,6 @@ type mockLayerStore struct {
63 63
 	layers map[layer.ChainID]*mockLayer
64 64
 }
65 65
 
66
-func createChainIDFromParent(parent layer.ChainID, dgsts ...layer.DiffID) layer.ChainID {
67
-	if len(dgsts) == 0 {
68
-		return parent
69
-	}
70
-	if parent == "" {
71
-		return createChainIDFromParent(layer.ChainID(dgsts[0]), dgsts[1:]...) // #nosec G602 -- false positive: slice bounds out of range
72
-	}
73
-	// H = "H(n-1) SHA256(n)"
74
-	dgst := digest.FromBytes([]byte(string(parent) + " " + string(dgsts[0]))) // #nosec G602 -- false positive: slice bounds out of range
75
-	return createChainIDFromParent(layer.ChainID(dgst), dgsts[1:]...)         // #nosec G602 -- false positive: slice bounds out of range
76
-}
77
-
78 66
 func (ls *mockLayerStore) Map() map[layer.ChainID]layer.Layer {
79 67
 	layers := map[layer.ChainID]layer.Layer{}
80 68
 
... ...
@@ -95,11 +84,13 @@ func (ls *mockLayerStore) RegisterWithDescriptor(reader io.Reader, parentID laye
95 95
 		err    error
96 96
 	)
97 97
 
98
+	var diffIDs []layer.DiffID
98 99
 	if parentID != "" {
99 100
 		parent, err = ls.Get(parentID)
100 101
 		if err != nil {
101 102
 			return nil, err
102 103
 		}
104
+		diffIDs = append(diffIDs, parentID)
103 105
 	}
104 106
 
105 107
 	l := &mockLayer{parent: parent}
... ...
@@ -107,8 +98,9 @@ func (ls *mockLayerStore) RegisterWithDescriptor(reader io.Reader, parentID laye
107 107
 	if err != nil {
108 108
 		return nil, err
109 109
 	}
110
-	l.diffID = layer.DiffID(digest.FromBytes(l.layerData.Bytes()))
111
-	l.chainID = createChainIDFromParent(parentID, l.diffID)
110
+	l.diffID = digest.FromBytes(l.layerData.Bytes())
111
+	diffIDs = append(diffIDs, l.diffID)
112
+	l.chainID = identity.ChainID(diffIDs)
112 113
 
113 114
 	ls.layers[l.chainID] = l
114 115
 	return l, nil
... ...
@@ -231,33 +223,33 @@ func downloadDescriptors(currentDownloads *atomic.Int32) []DownloadDescriptor {
231 231
 		&mockDownloadDescriptor{
232 232
 			currentDownloads: currentDownloads,
233 233
 			id:               "id1",
234
-			expectedDiffID:   layer.DiffID("sha256:68e2c75dc5c78ea9240689c60d7599766c213ae210434c53af18470ae8c53ec1"),
234
+			expectedDiffID:   "sha256:68e2c75dc5c78ea9240689c60d7599766c213ae210434c53af18470ae8c53ec1",
235 235
 		},
236 236
 		&mockDownloadDescriptor{
237 237
 			currentDownloads: currentDownloads,
238 238
 			id:               "id2",
239
-			expectedDiffID:   layer.DiffID("sha256:64a636223116aa837973a5d9c2bdd17d9b204e4f95ac423e20e65dfbb3655473"),
239
+			expectedDiffID:   "sha256:64a636223116aa837973a5d9c2bdd17d9b204e4f95ac423e20e65dfbb3655473",
240 240
 		},
241 241
 		&mockDownloadDescriptor{
242 242
 			currentDownloads: currentDownloads,
243 243
 			id:               "id3",
244
-			expectedDiffID:   layer.DiffID("sha256:58745a8bbd669c25213e9de578c4da5c8ee1c836b3581432c2b50e38a6753300"),
244
+			expectedDiffID:   "sha256:58745a8bbd669c25213e9de578c4da5c8ee1c836b3581432c2b50e38a6753300",
245 245
 		},
246 246
 		&mockDownloadDescriptor{
247 247
 			currentDownloads: currentDownloads,
248 248
 			id:               "id2",
249
-			expectedDiffID:   layer.DiffID("sha256:64a636223116aa837973a5d9c2bdd17d9b204e4f95ac423e20e65dfbb3655473"),
249
+			expectedDiffID:   "sha256:64a636223116aa837973a5d9c2bdd17d9b204e4f95ac423e20e65dfbb3655473",
250 250
 		},
251 251
 		&mockDownloadDescriptor{
252 252
 			currentDownloads: currentDownloads,
253 253
 			id:               "id4",
254
-			expectedDiffID:   layer.DiffID("sha256:0dfb5b9577716cc173e95af7c10289322c29a6453a1718addc00c0c5b1330936"),
254
+			expectedDiffID:   "sha256:0dfb5b9577716cc173e95af7c10289322c29a6453a1718addc00c0c5b1330936",
255 255
 			simulateRetries:  1,
256 256
 		},
257 257
 		&mockDownloadDescriptor{
258 258
 			currentDownloads: currentDownloads,
259 259
 			id:               "id5",
260
-			expectedDiffID:   layer.DiffID("sha256:0a5f25fa1acbc647f6112a6276735d0fa01e4ee2aa7ec33015e337350e1ea23d"),
260
+			expectedDiffID:   "sha256:0a5f25fa1acbc647f6112a6276735d0fa01e4ee2aa7ec33015e337350e1ea23d",
261 261
 		},
262 262
 	}
263 263
 }
... ...
@@ -91,7 +91,7 @@ func TestImageOSNotEmpty(t *testing.T) {
91 91
 
92 92
 func TestNewChildImageFromImageWithRootFS(t *testing.T) {
93 93
 	rootFS := NewRootFS()
94
-	rootFS.Append(layer.DiffID("ba5e"))
94
+	rootFS.Append("ba5e")
95 95
 	parent := &Image{
96 96
 		RootFS: rootFS,
97 97
 		History: []History{
... ...
@@ -109,7 +109,7 @@ func TestNewChildImageFromImageWithRootFS(t *testing.T) {
109 109
 	}
110 110
 
111 111
 	newImage := NewChildImage(parent, childConfig, "platform")
112
-	expectedDiffIDs := []layer.DiffID{layer.DiffID("ba5e"), layer.DiffID("abcdef")}
112
+	expectedDiffIDs := []layer.DiffID{"ba5e", "abcdef"}
113 113
 	assert.Check(t, is.DeepEqual(expectedDiffIDs, newImage.RootFS.DiffIDs))
114 114
 	assert.Check(t, is.Equal(childConfig.Author, newImage.Author))
115 115
 	assert.Check(t, is.DeepEqual(childConfig.Config, newImage.Config))
... ...
@@ -31,6 +31,8 @@ func TestRestore(t *testing.T) {
31 31
 	err = fsStore.SetMetadata(id2, "parent", []byte(id1))
32 32
 	assert.NilError(t, err)
33 33
 
34
+	// This produces an error log (trying to unmarshal the "invalid" value from above, but doesn't return an error;
35
+	// ERRO[0000] invalid image                                 digest="sha256:f1234d75178d892a133a410355a5a990cf75d2f33eba25d575943d4df632f3a4" err="invalid character 'i' looking for beginning of value: invalid"
34 36
 	imgStore, err := NewImageStore(fsStore, &mockLayerGetReleaser{})
35 37
 	assert.NilError(t, err)
36 38
 
... ...
@@ -284,7 +284,7 @@ func (s *saveSession) save(ctx context.Context, outStream io.Writer) error {
284 284
 			if _, ok := reposLegacy[familiarName]; !ok {
285 285
 				reposLegacy[familiarName] = make(map[string]string)
286 286
 			}
287
-			reposLegacy[familiarName][ref.Tag()] = digest.Digest(imageDescr.layers[len(imageDescr.layers)-1]).Encoded()
287
+			reposLegacy[familiarName][ref.Tag()] = imageDescr.layers[len(imageDescr.layers)-1].Encoded()
288 288
 			repoTags = append(repoTags, reference.FamiliarString(ref))
289 289
 
290 290
 			taggedManifest := untaggedMfstDesc
... ...
@@ -300,10 +300,9 @@ func (s *saveSession) save(ctx context.Context, outStream io.Writer) error {
300 300
 			manifestDescriptors = append(manifestDescriptors, untaggedMfstDesc)
301 301
 		}
302 302
 
303
-		for _, l := range imageDescr.layers {
303
+		for _, lDgst := range imageDescr.layers {
304 304
 			// IMPORTANT: We use path, not filepath here to ensure the layers
305 305
 			// in the manifest use Unix-style forward-slashes.
306
-			lDgst := digest.Digest(l)
307 306
 			layers = append(layers, path.Join(ocispec.ImageBlobsDir, lDgst.Algorithm().String(), lDgst.Encoded()))
308 307
 		}
309 308
 
... ...
@@ -530,11 +529,11 @@ func (s *saveSession) saveConfigAndLayer(ctx context.Context, id layer.ChainID,
530 530
 	}
531 531
 
532 532
 	lDiffID := l.DiffID()
533
-	lDgst := digest.Digest(lDiffID)
533
+	lDgst := lDiffID
534 534
 	if _, ok := s.savedLayers[lDiffID]; ok {
535 535
 		return s.savedLayers[lDiffID], nil
536 536
 	}
537
-	layerPath := filepath.Join(outDir, lDgst.Algorithm().String(), lDgst.Encoded())
537
+	layerPath := filepath.Join(outDir, lDiffID.Algorithm().String(), lDiffID.Encoded())
538 538
 	defer layer.ReleaseAndLog(s.lss, l)
539 539
 
540 540
 	if _, err = os.Stat(layerPath); err == nil {
... ...
@@ -9,7 +9,7 @@ import (
9 9
 
10 10
 // DigestSHA256EmptyTar is the canonical sha256 digest of empty tar file -
11 11
 // (1024 NULL bytes)
12
-const DigestSHA256EmptyTar = DiffID("sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef")
12
+const DigestSHA256EmptyTar DiffID = "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
13 13
 
14 14
 type emptyLayer struct{}
15 15
 
... ...
@@ -19,7 +19,7 @@ var EmptyLayer = &emptyLayer{}
19 19
 func (el *emptyLayer) TarStream() (io.ReadCloser, error) {
20 20
 	buf := new(bytes.Buffer)
21 21
 	tarWriter := tar.NewWriter(buf)
22
-	tarWriter.Close()
22
+	_ = tarWriter.Close()
23 23
 	return io.NopCloser(buf), nil
24 24
 }
25 25
 
... ...
@@ -31,7 +31,7 @@ func (el *emptyLayer) TarStreamFrom(p ChainID) (io.ReadCloser, error) {
31 31
 }
32 32
 
33 33
 func (el *emptyLayer) ChainID() ChainID {
34
-	return ChainID(DigestSHA256EmptyTar)
34
+	return DigestSHA256EmptyTar
35 35
 }
36 36
 
37 37
 func (el *emptyLayer) DiffID() DiffID {
... ...
@@ -8,7 +8,7 @@ import (
8 8
 )
9 9
 
10 10
 func TestEmptyLayer(t *testing.T) {
11
-	if EmptyLayer.ChainID() != ChainID(DigestSHA256EmptyTar) {
11
+	if EmptyLayer.ChainID() != DigestSHA256EmptyTar {
12 12
 		t.Fatal("wrong ChainID for empty layer")
13 13
 	}
14 14
 
... ...
@@ -45,7 +45,7 @@ func TestEmptyLayer(t *testing.T) {
45 45
 		t.Fatalf("error hashing empty tar layer: %v", err)
46 46
 	}
47 47
 
48
-	if digester.Digest() != digest.Digest(DigestSHA256EmptyTar) {
48
+	if digester.Digest() != DigestSHA256EmptyTar {
49 49
 		t.Fatal("empty layer tar stream hashes to wrong value")
50 50
 	}
51 51
 }
... ...
@@ -46,8 +46,7 @@ func newFSMetadataStore(root string) (*fileMetadataStore, error) {
46 46
 }
47 47
 
48 48
 func (fms *fileMetadataStore) getLayerDirectory(layer ChainID) string {
49
-	dgst := digest.Digest(layer)
50
-	return filepath.Join(fms.root, string(dgst.Algorithm()), dgst.Encoded())
49
+	return filepath.Join(fms.root, string(layer.Algorithm()), layer.Encoded())
51 50
 }
52 51
 
53 52
 func (fms *fileMetadataStore) getLayerFilename(layer ChainID, filename string) string {
... ...
@@ -83,11 +82,11 @@ func (fm *fileMetadataTransaction) SetSize(size int64) error {
83 83
 }
84 84
 
85 85
 func (fm *fileMetadataTransaction) SetParent(parent ChainID) error {
86
-	return fm.ws.WriteFile("parent", []byte(digest.Digest(parent).String()), 0o644)
86
+	return fm.ws.WriteFile("parent", []byte(parent.String()), 0o644)
87 87
 }
88 88
 
89 89
 func (fm *fileMetadataTransaction) SetDiffID(diff DiffID) error {
90
-	return fm.ws.WriteFile("diff", []byte(digest.Digest(diff).String()), 0o644)
90
+	return fm.ws.WriteFile("diff", []byte(diff.String()), 0o644)
91 91
 }
92 92
 
93 93
 func (fm *fileMetadataTransaction) SetCacheID(cacheID string) error {
... ...
@@ -165,7 +164,7 @@ func (fms *fileMetadataStore) GetParent(layer ChainID) (ChainID, error) {
165 165
 		return "", err
166 166
 	}
167 167
 
168
-	return ChainID(dgst), nil
168
+	return dgst, nil
169 169
 }
170 170
 
171 171
 func (fms *fileMetadataStore) GetDiffID(layer ChainID) (DiffID, error) {
... ...
@@ -179,7 +178,7 @@ func (fms *fileMetadataStore) GetDiffID(layer ChainID) (DiffID, error) {
179 179
 		return "", err
180 180
 	}
181 181
 
182
-	return DiffID(dgst), nil
182
+	return dgst, nil
183 183
 }
184 184
 
185 185
 func (fms *fileMetadataStore) GetCacheID(layer ChainID) (string, error) {
... ...
@@ -249,7 +248,7 @@ func (fms *fileMetadataStore) SetMountParent(mount string, parent ChainID) error
249 249
 	if err := os.MkdirAll(fms.getMountDirectory(mount), 0o755); err != nil {
250 250
 		return err
251 251
 	}
252
-	return os.WriteFile(fms.getMountFilename(mount, "parent"), []byte(digest.Digest(parent).String()), 0o644)
252
+	return os.WriteFile(fms.getMountFilename(mount, "parent"), []byte(parent.String()), 0o644)
253 253
 }
254 254
 
255 255
 func (fms *fileMetadataStore) GetMountID(mount string) (string, error) {
... ...
@@ -297,7 +296,7 @@ func (fms *fileMetadataStore) GetMountParent(mount string) (ChainID, error) {
297 297
 		return "", err
298 298
 	}
299 299
 
300
-	return ChainID(dgst), nil
300
+	return dgst, nil
301 301
 }
302 302
 
303 303
 func (fms *fileMetadataStore) getOrphan() ([]roLayer, error) {
... ...
@@ -339,7 +338,7 @@ func (fms *fileMetadataStore) getOrphan() ([]roLayer, error) {
339 339
 			}
340 340
 
341 341
 			l := &roLayer{
342
-				chainID: ChainID(dgst),
342
+				chainID: dgst,
343 343
 				cacheID: cacheID,
344 344
 			}
345 345
 			orphanLayers = append(orphanLayers, *l)
... ...
@@ -366,7 +365,7 @@ func (fms *fileMetadataStore) List() ([]ChainID, []string, error) {
366 366
 				if err := dgst.Validate(); err != nil {
367 367
 					log.G(context.TODO()).Debugf("Ignoring invalid digest %s:%s", algorithm, fi.Name())
368 368
 				} else {
369
-					ids = append(ids, ChainID(dgst))
369
+					ids = append(ids, dgst)
370 370
 				}
371 371
 			}
372 372
 		}
... ...
@@ -392,7 +391,7 @@ func (fms *fileMetadataStore) List() ([]ChainID, []string, error) {
392 392
 
393 393
 // Remove layerdb folder if that is marked for removal
394 394
 func (fms *fileMetadataStore) Remove(layer ChainID, cache string) error {
395
-	dgst := digest.Digest(layer)
395
+	dgst := layer
396 396
 	files, err := os.ReadDir(filepath.Join(fms.root, string(dgst.Algorithm())))
397 397
 	if err != nil {
398 398
 		return err
... ...
@@ -17,7 +17,7 @@ import (
17 17
 
18 18
 func randomLayerID(seed int64) ChainID {
19 19
 	r := rand.New(rand.NewSource(seed)).Int63()
20
-	return ChainID(digest.FromBytes([]byte(strconv.FormatInt(r, 10))))
20
+	return digest.FromBytes([]byte(strconv.FormatInt(r, 10)))
21 21
 }
22 22
 
23 23
 func newFileMetadataStore(t *testing.T) (*fileMetadataStore, string) {
... ...
@@ -243,7 +243,7 @@ func (ls *layerStore) applyTar(tx *fileMetadataTransaction, ts io.Reader, parent
243 243
 	}
244 244
 
245 245
 	layer.size = applySize
246
-	layer.diffID = DiffID(digester.Digest())
246
+	layer.diffID = digester.Digest()
247 247
 
248 248
 	log.G(context.TODO()).Debugf("Applied tar %s to %s, size: %d", layer.diffID, layer.cacheID, applySize)
249 249
 
... ...
@@ -386,9 +386,8 @@ func (ls *layerStore) deleteLayer(layer *roLayer, metadata *Metadata) error {
386 386
 	// if ls.driver.Remove fails
387 387
 	var dir string
388 388
 	for {
389
-		dgst := digest.Digest(layer.chainID)
390
-		tmpID := fmt.Sprintf("%s-%s-removing", dgst.Encoded(), stringid.GenerateRandomID())
391
-		dir = filepath.Join(ls.store.root, string(dgst.Algorithm()), tmpID)
389
+		tmpID := fmt.Sprintf("%s-%s-removing", layer.chainID.Encoded(), stringid.GenerateRandomID())
390
+		dir = filepath.Join(ls.store.root, string(layer.chainID.Algorithm()), tmpID)
392 391
 		err := os.Rename(ls.store.getLayerDirectory(layer.chainID), dir)
393 392
 		if os.IsExist(err) {
394 393
 			continue
... ...
@@ -517,7 +517,7 @@ func TestTarStreamStability(t *testing.T) {
517 517
 func assertLayerDiff(t *testing.T, expected []byte, layer Layer) {
518 518
 	expectedDigest := digest.FromBytes(expected)
519 519
 
520
-	if digest.Digest(layer.DiffID()) != expectedDigest {
520
+	if layer.DiffID() != expectedDigest {
521 521
 		t.Fatalf("Mismatched diff id for %s, got %s, expected %s", layer.ChainID(), layer.DiffID(), expected)
522 522
 	}
523 523
 
... ...
@@ -698,8 +698,8 @@ func TestTarStreamVerification(t *testing.T) {
698 698
 	if err != nil {
699 699
 		t.Fatal(err)
700 700
 	}
701
-	id1 := digest.Digest(layer1.ChainID())
702
-	id2 := digest.Digest(layer2.ChainID())
701
+	id1 := layer1.ChainID()
702
+	id2 := layer2.ChainID()
703 703
 
704 704
 	// Replace tar data files
705 705
 	src, err := os.Open(filepath.Join(tmpdir, id1.Algorithm().String(), id1.Encoded(), "tar-split.json.gz"))
... ...
@@ -29,7 +29,7 @@ func (rl *roLayer) TarStream() (io.ReadCloser, error) {
29 29
 		return nil, err
30 30
 	}
31 31
 
32
-	vrc, err := newVerifiedReadCloser(rc, digest.Digest(rl.diffID))
32
+	vrc, err := newVerifiedReadCloser(rc, rl.diffID)
33 33
 	if err != nil {
34 34
 		return nil, err
35 35
 	}
... ...
@@ -48,7 +48,7 @@ func (rl *roLayer) TarStreamFrom(parent ChainID) (io.ReadCloser, error) {
48 48
 		}
49 49
 	}
50 50
 
51
-	if parent != ChainID("") && parentCacheID == "" {
51
+	if parent != "" && parentCacheID == "" {
52 52
 		return nil, fmt.Errorf("layer ID '%s' is not a parent of the specified layer: cannot provide diff to non-parent", parent)
53 53
 	}
54 54
 	return rl.layerStore.driver.Diff(rl.cacheID, parentCacheID)