From eea97055fbc66e3bf57c536d074615cf3938360a Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Tue, 8 Jul 2014 12:23:08 -0700 Subject: [PATCH] Revert "allow overwrite in untar" This reverts commit 5a3d774e5651da772a065282a1fb1a31e19e911c. Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) Upstream-commit: 10d066c9cbc074a72ef3bb4f06a39b691a155082 Component: engine --- components/engine/archive/archive.go | 15 ++++++--------- components/engine/archive/archive_test.go | 3 --- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/components/engine/archive/archive.go b/components/engine/archive/archive.go index 8d8b7412cc..b9701b58af 100644 --- a/components/engine/archive/archive.go +++ b/components/engine/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/components/engine/archive/archive_test.go b/components/engine/archive/archive_test.go index 1b5e146965..e05cd72e49 100644 --- a/components/engine/archive/archive_test.go +++ b/components/engine/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 {