mirror of
https://github.com/GoogleContainerTools/kaniko
synced 2026-10-18 01:34:36 +02:00
Merge pull request #319 from priyawadhwa/bug
Snapshot only specific files for COPY
This commit is contained in:
+3
-7
@@ -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)
|
||||
}
|
||||
|
||||
@@ -79,10 +79,7 @@ func (c *CopyCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bu
|
||||
// we need to add '/' to the end to indicate the destination is a directory
|
||||
dest = filepath.Join(cwd, dest) + "/"
|
||||
}
|
||||
if err := util.CopyDir(fullPath, dest); err != nil {
|
||||
return err
|
||||
}
|
||||
copiedFiles, err := util.Files(dest)
|
||||
copiedFiles, err := util.CopyDir(fullPath, dest)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
+18
-30
@@ -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 {
|
||||
@@ -459,16 +444,18 @@ func DownloadFileToDest(rawurl, dest string) error {
|
||||
}
|
||||
|
||||
// CopyDir copies the file or directory at src to dest
|
||||
func CopyDir(src, dest string) error {
|
||||
// It returns a list of files it copied over
|
||||
func CopyDir(src, dest string) ([]string, error) {
|
||||
files, err := RelativeFiles("", src)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
var copiedFiles []string
|
||||
for _, file := range files {
|
||||
fullPath := filepath.Join(src, file)
|
||||
fi, err := os.Lstat(fullPath)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
destPath := filepath.Join(dest, file)
|
||||
if fi.IsDir() {
|
||||
@@ -478,24 +465,25 @@ func CopyDir(src, dest string) error {
|
||||
gid := int(fi.Sys().(*syscall.Stat_t).Gid)
|
||||
|
||||
if err := os.MkdirAll(destPath, fi.Mode()); err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
if err := os.Chown(destPath, uid, gid); err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
} else if fi.Mode()&os.ModeSymlink != 0 {
|
||||
// If file is a symlink, we want to create the same relative symlink
|
||||
if err := CopySymlink(fullPath, destPath); err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
// ... Else, we want to copy over a file
|
||||
if err := CopyFile(fullPath, destPath); err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
copiedFiles = append(copiedFiles, destPath)
|
||||
}
|
||||
return nil
|
||||
return copiedFiles, nil
|
||||
}
|
||||
|
||||
// CopySymlink copies the symlink at src to dest
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user