Skip to content

Commit 2c0cf71

Browse files
authored
Merge pull request moby#3982 from jedevc/fix-unpack-empty-layers
Fix containerimage multi-platform unpack
2 parents dda2da9 + 535eac9 commit 2c0cf71

File tree

2 files changed

+10
-9
lines changed

2 files changed

+10
-9
lines changed

client/client_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2241,6 +2241,7 @@ func testBuildExportScratch(t *testing.T, sb integration.Sandbox) {
22412241
Attrs: map[string]string{
22422242
"name": target,
22432243
"push": "true",
2244+
"unpack": "true",
22442245
"compression": "uncompressed",
22452246
},
22462247
},

exporter/containerimage/export.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source
271271
}
272272
tagDone(nil)
273273

274-
if src.Ref != nil && e.unpack {
274+
if e.unpack {
275275
if err := e.unpackImage(ctx, img, src, session.NewGroup(sessionID)); err != nil {
276276
return nil, nil, err
277277
}
@@ -375,16 +375,16 @@ func (e *imageExporterInstance) unpackImage(ctx context.Context, img images.Imag
375375
return err
376376
}
377377

378-
topLayerRef := src.Ref
379-
if len(src.Refs) > 0 {
380-
if r, ok := src.Refs[defaultPlatform()]; ok {
381-
topLayerRef = r
382-
} else {
383-
return errors.Errorf("no reference for default platform %s", defaultPlatform())
384-
}
378+
ref, ok := src.FindRef(defaultPlatform())
379+
if !ok {
380+
return errors.Errorf("no reference for default platform %s", defaultPlatform())
381+
}
382+
if ref == nil {
383+
// ref has no layers, so nothing to unpack
384+
return nil
385385
}
386386

387-
remotes, err := topLayerRef.GetRemotes(ctx, true, e.opts.RefCfg, false, s)
387+
remotes, err := ref.GetRemotes(ctx, true, e.opts.RefCfg, false, s)
388388
if err != nil {
389389
return err
390390
}

0 commit comments

Comments
 (0)