Selaa lähdekoodia

Merge pull request #4134 from crosbymichael/fix-add-magic-regression

Fix regression with ADD of tar files
unclejack 11 vuotta sitten
vanhempi
commit
1b8ec8ff1d
1 muutettua tiedostoa jossa 26 lisäystä ja 10 poistoa
  1. 26 10
      buildfile.go

+ 26 - 10
buildfile.go

@@ -371,20 +371,36 @@ func (b *buildFile) addContext(container *Container, orig, dest string) error {
 		}
 		return err
 	}
+
 	if fi.IsDir() {
 		if err := archive.CopyWithTar(origPath, destPath); err != nil {
 			return err
 		}
-		// First try to unpack the source as an archive
-	} else if err := archive.UntarPath(origPath, destPath); err != nil {
-		utils.Debugf("Couldn't untar %s to %s: %s", origPath, destPath, err)
-		// If that fails, just copy it as a regular file
-		if err := os.MkdirAll(path.Dir(destPath), 0755); err != nil {
-			return err
-		}
-		if err := archive.CopyWithTar(origPath, destPath); err != nil {
-			return err
-		}
+		return nil
+	}
+
+	// First try to unpack the source as an archive
+	// to support the untar feature we need to clean up the path a little bit
+	// because tar is very forgiving.  First we need to strip off the archive's
+	// filename from the path but this is only added if it does not end in / .
+	tarDest := destPath
+	if strings.HasSuffix(tarDest, "/") {
+		tarDest = filepath.Dir(destPath)
+	}
+
+	// try to successfully untar the orig
+	if err := archive.UntarPath(origPath, tarDest); err == nil {
+		return nil
+	}
+	utils.Debugf("Couldn't untar %s to %s: %s", origPath, destPath, err)
+
+	// If that fails, just copy it as a regular file
+	// but do not use all the magic path handling for the tar path
+	if err := os.MkdirAll(path.Dir(destPath), 0755); err != nil {
+		return err
+	}
+	if err := archive.CopyWithTar(origPath, destPath); err != nil {
+		return err
 	}
 	return nil
 }