Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -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, |
| ... | ... |
@@ -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) |