diff --git a/pkg/commands/add.go b/pkg/commands/add.go index cf6ff7772..e0e317967 100644 --- a/pkg/commands/add.go +++ b/pkg/commands/add.go @@ -79,16 +79,12 @@ func (a *AddCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bui a.snapshotFiles = append(a.snapshotFiles, urlDest) } else if util.IsFileLocalTarArchive(fullPath) { logrus.Infof("Unpacking local tar archive %s to %s", src, dest) - if err := util.UnpackLocalTarArchive(fullPath, dest); err != nil { - return err - } - // Add the unpacked files to the snapshotter - filesAdded, err := util.Files(dest) + extractedFiles, err := util.UnpackLocalTarArchive(fullPath, dest) if err != nil { return err } - logrus.Debugf("Added %v from local tar archive %s", filesAdded, src) - a.snapshotFiles = append(a.snapshotFiles, filesAdded...) + logrus.Debugf("Added %v from local tar archive %s", extractedFiles, src) + a.snapshotFiles = append(a.snapshotFiles, extractedFiles...) } else { unresolvedSrcs = append(unresolvedSrcs, src) } diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index 858312b24..67a972002 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -155,7 +155,9 @@ func ChildDirInWhitelist(path, directory string) bool { return false } -func unTar(r io.Reader, dest string) error { +// unTar returns a list of files that have been extracted from the tar archive at r to the path at dest +func unTar(r io.Reader, dest string) ([]string, error) { + var extractedFiles []string tr := tar.NewReader(r) for { hdr, err := tr.Next() @@ -163,13 +165,14 @@ func unTar(r io.Reader, dest string) error { break } if err != nil { - return err + return nil, err } if err := extractFile(dest, hdr, tr); err != nil { - return err + return nil, err } + extractedFiles = append(extractedFiles, dest) } - return nil + return extractedFiles, nil } func extractFile(dest string, hdr *tar.Header, tr io.Reader) error { @@ -349,24 +352,6 @@ func RelativeFiles(fp string, root string) ([]string, error) { return files, err } -// Files returns a list of all files rooted at root -func Files(root string) ([]string, error) { - var files []string - logrus.Debugf("Getting files and contents at root %s", root) - err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { - whitelisted, err := CheckWhitelist(path) - if err != nil { - return err - } - if whitelisted { - return nil - } - files = append(files, path) - return err - }) - return files, err -} - // ParentDirectories returns a list of paths to all parent directories // Ex. /some/temp/dir -> [/, /some, /some/temp, /some/temp/dir] func ParentDirectories(path string) []string { diff --git a/pkg/util/tar_util.go b/pkg/util/tar_util.go index f95574deb..898844784 100644 --- a/pkg/util/tar_util.go +++ b/pkg/util/tar_util.go @@ -137,17 +137,17 @@ func (t *Tar) checkHardlink(p string, i os.FileInfo) (bool, string) { } // UnpackLocalTarArchive unpacks the tar archive at path to the directory dest -// Returns true if the path was actually unpacked -func UnpackLocalTarArchive(path, dest string) error { +// Returns the files extracted from the tar archive +func UnpackLocalTarArchive(path, dest string) ([]string, error) { // First, we need to check if the path is a local tar archive if compressed, compressionLevel := fileIsCompressedTar(path); compressed { file, err := os.Open(path) if err != nil { - return err + return nil, err } defer file.Close() if compressionLevel == archive.Gzip { - return UnpackCompressedTar(path, dest) + return nil, UnpackCompressedTar(path, dest) } else if compressionLevel == archive.Bzip2 { bzr := bzip2.NewReader(file) return unTar(bzr, dest) @@ -156,12 +156,12 @@ func UnpackLocalTarArchive(path, dest string) error { if fileIsUncompressedTar(path) { file, err := os.Open(path) if err != nil { - return err + return nil, err } defer file.Close() return unTar(file, dest) } - return errors.New("path does not lead to local tar archive") + return nil, errors.New("path does not lead to local tar archive") } //IsFileLocalTarArchive returns true if the file is a local tar archive @@ -223,5 +223,6 @@ func UnpackCompressedTar(path, dir string) error { return err } defer gzr.Close() - return unTar(gzr, dir) + _, err = unTar(gzr, dir) + return err }