Merge pull request #35579 from dnephin/fix-layer-dne

Fix layer DNE with duplicate layers
This commit is contained in:
Tõnis Tiigi 2017-11-27 09:40:54 -08:00 committed by GitHub
commit 9fe48f081d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 5 deletions

View file

@ -71,11 +71,7 @@ func (rl *releaseableLayer) Commit(os string) (builder.ReleaseableLayer, error)
if err != nil {
return nil, err
}
if layer.IsEmpty(newLayer.DiffID()) {
_, err := rl.layerStore.Release(newLayer)
return &releaseableLayer{layerStore: rl.layerStore}, err
}
// TODO: An optimization woudld be to handle empty layers before returning
return &releaseableLayer{layerStore: rl.layerStore, roLayer: newLayer}, nil
}

View file

@ -169,3 +169,31 @@ func TestBuildMultiStageParentConfig(t *testing.T) {
assert.Equal(t, "/foo/sub2", image.Config.WorkingDir)
assert.Contains(t, image.Config.Env, "WHO=parent")
}
func TestBuildWithEmptyLayers(t *testing.T) {
dockerfile := `
FROM busybox
COPY 1/ /target/
COPY 2/ /target/
COPY 3/ /target/
`
ctx := context.Background()
source := fakecontext.New(t, "",
fakecontext.WithDockerfile(dockerfile),
fakecontext.WithFile("1/a", "asdf"),
fakecontext.WithFile("2/a", "asdf"),
fakecontext.WithFile("3/a", "asdf"))
defer source.Close()
apiclient := testEnv.APIClient()
resp, err := apiclient.ImageBuild(ctx,
source.AsTarReader(t),
types.ImageBuildOptions{
Remove: true,
ForceRemove: true,
})
require.NoError(t, err)
_, err = io.Copy(ioutil.Discard, resp.Body)
resp.Body.Close()
require.NoError(t, err)
}