summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Crosby <michael@docker.com>2014-07-08 12:23:08 -0700
committerVictor Vieux <vieux@docker.com>2014-07-08 21:30:52 +0000
commit44456ba065118231d02334f6b1faee7971a41d3a (patch)
tree32ed017fc9bf97f25255cfda9943068a0abaf142
parent4c52272a2dbe642869d5e915435ebe16cc9045b8 (diff)
downloaddocker-44456ba065118231d02334f6b1faee7971a41d3a.tar.gz
Revert "allow overwrite in untar"
This reverts commit 5a3d774e5651da772a065282a1fb1a31e19e911c. Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@docker.com> (github: crosbymichael) Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@docker.com> (github: vieux)
-rw-r--r--archive/archive.go15
-rw-r--r--archive/archive_test.go3
2 files changed, 6 insertions, 12 deletions
diff --git a/archive/archive.go b/archive/archive.go
index 8d8b7412cc..b9701b58af 100644
--- a/archive/archive.go
+++ b/archive/archive.go
@@ -383,8 +383,7 @@ func TarWithOptions(srcPath string, options *TarOptions) (io.ReadCloser, error)
// identity (uncompressed), gzip, bzip2, xz.
// If `dest` does not exist, it is created unless there are multiple entries in `archive`.
// In the latter case, an error is returned.
-// If `dest` is an existing file, it gets overwritten.
-// If `dest` is an existing directory, its files get merged (with overwrite for conflicting files).
+// An other error is returned if `dest` exists but is not a directory, to prevent overwriting.
func Untar(archive io.Reader, dest string, options *TarOptions) error {
if archive == nil {
return fmt.Errorf("Empty archive")
@@ -400,7 +399,7 @@ func Untar(archive io.Reader, dest string, options *TarOptions) error {
var (
dirs []*tar.Header
- create bool
+ destNotExist bool
multipleEntries bool
)
@@ -409,10 +408,9 @@ func Untar(archive io.Reader, dest string, options *TarOptions) error {
return err
}
// destination does not exist, so it is assumed it has to be created.
- create = true
+ destNotExist = true
} else if !fi.IsDir() {
- // destination exists and is not a directory, so it will be overwritten.
- create = true
+ return fmt.Errorf("Trying to untar to `%s`: exists but not a directory", dest)
}
// Iterate through the files in the archive.
@@ -427,7 +425,7 @@ func Untar(archive io.Reader, dest string, options *TarOptions) error {
}
// Return an error if destination needs to be created and there is more than 1 entry in the tar stream.
- if create && multipleEntries {
+ if destNotExist && multipleEntries {
return fmt.Errorf("Trying to untar an archive with multiple entries to an inexistant target `%s`: did you mean `%s` instead?", dest, filepath.Dir(dest))
}
@@ -447,7 +445,7 @@ func Untar(archive io.Reader, dest string, options *TarOptions) error {
}
var path string
- if create {
+ if destNotExist {
path = dest // we are renaming hdr.Name to dest
} else {
path = filepath.Join(dest, hdr.Name)
@@ -467,7 +465,6 @@ func Untar(archive io.Reader, dest string, options *TarOptions) error {
}
}
}
-
if err := createTarFile(path, dest, hdr, tr, options == nil || !options.NoLchown); err != nil {
return err
}
diff --git a/archive/archive_test.go b/archive/archive_test.go
index 1b5e146965..e05cd72e49 100644
--- a/archive/archive_test.go
+++ b/archive/archive_test.go
@@ -176,9 +176,6 @@ func TestTarUntarFile(t *testing.T) {
if err := ioutil.WriteFile(path.Join(origin, "before", "file"), []byte("hello world"), 0700); err != nil {
t.Fatal(err)
}
- if err := ioutil.WriteFile(path.Join(origin, "after", "file2"), []byte("please overwrite me"), 0700); err != nil {
- t.Fatal(err)
- }
tar, err := TarWithOptions(path.Join(origin, "before"), &TarOptions{Compression: Uncompressed, Includes: []string{"file"}})
if err != nil {