From 4f73cb3ecd41d751fa8f167b030310a03224a42c Mon Sep 17 00:00:00 2001 From: Doug Davis Date: Wed, 15 Jul 2015 06:04:35 -0700 Subject: [PATCH] Cleanup build tmp dir stuff If there's an error while unpacking the build context then we weren't erasing the tmp dir created to persist the context. Signed-off-by: Doug Davis Upstream-commit: 13c08b898b1ad26dda2900c90314afa0bd2d3a1f Component: engine --- components/engine/builder/internals.go | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/components/engine/builder/internals.go b/components/engine/builder/internals.go index bf085d4ff3..420c3bac37 100644 --- a/components/engine/builder/internals.go +++ b/components/engine/builder/internals.go @@ -39,27 +39,37 @@ import ( "github.com/docker/docker/runconfig" ) -func (b *Builder) readContext(context io.Reader) error { +func (b *Builder) readContext(context io.Reader) (err error) { tmpdirPath, err := ioutil.TempDir("", "docker-build") if err != nil { - return err + return } + // Make sure we clean-up upon error. In the happy case the caller + // is expected to manage the clean-up + defer func() { + if err != nil { + if e := os.RemoveAll(tmpdirPath); e != nil { + logrus.Debugf("[BUILDER] failed to remove temporary context: %s", e) + } + } + }() + decompressedStream, err := archive.DecompressStream(context) if err != nil { - return err + return } if b.context, err = tarsum.NewTarSum(decompressedStream, true, tarsum.Version1); err != nil { - return err + return } - if err := chrootarchive.Untar(b.context, tmpdirPath, nil); err != nil { - return err + if err = chrootarchive.Untar(b.context, tmpdirPath, nil); err != nil { + return } b.contextPath = tmpdirPath - return nil + return } func (b *Builder) commit(id string, autoCmd *runconfig.Command, comment string) error {