diff --git a/buildfile.go b/buildfile.go index ef4b95c064..dc86026226 100644 --- a/buildfile.go +++ b/buildfile.go @@ -604,11 +604,12 @@ func (b *buildFile) Build(context io.Reader) (string, error) { if err != nil { return "", err } - b.context = &utils.TarSum{Reader: context} + b.context = &utils.TarSum{Reader: context, DisableCompression: true} if err := archive.Untar(b.context, tmpdirPath, nil); err != nil { return "", err } defer os.RemoveAll(tmpdirPath) + b.contextPath = tmpdirPath filename := path.Join(tmpdirPath, "Dockerfile") if _, err := os.Stat(filename); os.IsNotExist(err) { diff --git a/utils/tarsum.go b/utils/tarsum.go index 7de3dbe5be..786196b6b4 100644 --- a/utils/tarsum.go +++ b/utils/tarsum.go @@ -15,16 +15,34 @@ import ( type TarSum struct { io.Reader - tarR *tar.Reader - tarW *tar.Writer - gz *gzip.Writer - bufTar *bytes.Buffer - bufGz *bytes.Buffer - h hash.Hash - sums map[string]string - currentFile string - finished bool - first bool + tarR *tar.Reader + tarW *tar.Writer + gz writeCloseFlusher + bufTar *bytes.Buffer + bufGz *bytes.Buffer + h hash.Hash + sums map[string]string + currentFile string + finished bool + first bool + DisableCompression bool +} + +type writeCloseFlusher interface { + io.WriteCloser + Flush() error +} + +type nopCloseFlusher struct { + io.Writer +} + +func (n *nopCloseFlusher) Close() error { + return nil +} + +func (n *nopCloseFlusher) Flush() error { + return nil } func (ts *TarSum) encodeHeader(h *tar.Header) error { @@ -57,7 +75,11 @@ func (ts *TarSum) Read(buf []byte) (int, error) { ts.bufGz = bytes.NewBuffer([]byte{}) ts.tarR = tar.NewReader(ts.Reader) ts.tarW = tar.NewWriter(ts.bufTar) - ts.gz = gzip.NewWriter(ts.bufGz) + if !ts.DisableCompression { + ts.gz = gzip.NewWriter(ts.bufGz) + } else { + ts.gz = &nopCloseFlusher{Writer: ts.bufGz} + } ts.h = sha256.New() ts.h.Reset() ts.first = true