Pārlūkot izejas kodu

Make sure the remote ADD are cached properly

Docker-DCO-1.0-Signed-off-by: Guillaume J. Charmes <guillaume.charmes@docker.com> (github: creack)
Guillaume J. Charmes 11 gadi atpakaļ
vecāks
revīzija
0fd9c98de3
1 mainītis faili ar 15 papildinājumiem un 3 dzēšanām
  1. 15 3
      buildfile.go

+ 15 - 3
buildfile.go

@@ -353,8 +353,9 @@ func (b *buildFile) CmdAdd(args string) error {
 
 	// FIXME: do we really need this?
 	var (
-		origPath = orig
-		destPath = dest
+		origPath   = orig
+		destPath   = dest
+		remoteHash string
 	)
 
 	if utils.IsURL(orig) {
@@ -373,11 +374,20 @@ func (b *buildFile) CmdAdd(args string) error {
 		}
 		defer os.RemoveAll(tmpDirName)
 		if _, err = io.Copy(tmpFile, resp.Body); err != nil {
+			tmpFile.Close()
 			return err
 		}
 		origPath = path.Join(filepath.Base(tmpDirName), filepath.Base(tmpFileName))
 		tmpFile.Close()
 
+		// Process the checksum
+		r, err := archive.Tar(tmpFileName, archive.Uncompressed)
+		if err != nil {
+			return err
+		}
+		tarSum := utils.TarSum{Reader: r, DisableCompression: true}
+		remoteHash = tarSum.Sum(nil)
+
 		// If the destination is a directory, figure out the filename.
 		if strings.HasSuffix(dest, "/") {
 			u, err := url.Parse(orig)
@@ -408,7 +418,9 @@ func (b *buildFile) CmdAdd(args string) error {
 			sums = b.context.GetSums()
 		)
 
-		if fi, err := os.Stat(path.Join(b.contextPath, origPath)); err != nil {
+		if remoteHash != "" {
+			hash = remoteHash
+		} else if fi, err := os.Stat(path.Join(b.contextPath, origPath)); err != nil {
 			return err
 		} else if fi.IsDir() {
 			var subfiles []string