fix adding symlinks to FS which do not exists
This commit is contained in:
parent
f1f7297478
commit
478205e5ca
|
|
@ -563,7 +563,6 @@ func DoBuild(opts *config.KanikoOptions) (v1.Image, error) {
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
filesToSave, err := filesToSave(crossStageDependencies[index])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -599,7 +598,7 @@ func filesToSave(deps []string) ([]string, error) {
|
|||
return nil, err
|
||||
}
|
||||
for _, f := range srcs {
|
||||
if link, err := util.CanonicalizeLink(f); err == nil {
|
||||
if link, err := util.EvalSymLink(f); err == nil {
|
||||
symLinks = append(symLinks, f)
|
||||
srcFiles = append(srcFiles, link)
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ package snapshot
|
|||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"syscall"
|
||||
|
|
@ -197,7 +198,6 @@ func (s *Snapshotter) scanFullFilesystem() ([]string, []string, error) {
|
|||
return nil, nil, fmt.Errorf("unable to add file %s to layered map: %s", file, err)
|
||||
}
|
||||
}
|
||||
|
||||
return filesToAdd, filesToWhiteOut, nil
|
||||
}
|
||||
|
||||
|
|
@ -240,11 +240,18 @@ func filesWithParentDirs(files []string) []string {
|
|||
}
|
||||
|
||||
func filesWithLinks(path string) ([]string, error) {
|
||||
link, err := util.CanonicalizeLink(path)
|
||||
link, err := util.GetSymLink(path)
|
||||
if err == util.ErrNotSymLink {
|
||||
return []string{path}, nil
|
||||
} else if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Add symlink if it exists in the FS
|
||||
if !filepath.IsAbs(link) {
|
||||
link = filepath.Join(filepath.Dir(path), link)
|
||||
}
|
||||
if _, err := os.Stat(link); err != nil {
|
||||
return []string{path}, nil
|
||||
}
|
||||
return []string{path, link}, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -506,6 +506,7 @@ func CopyDir(src, dest, buildcontext string) ([]string, error) {
|
|||
fullPath := filepath.Join(src, file)
|
||||
fi, err := os.Lstat(fullPath)
|
||||
if err != nil {
|
||||
fmt.Println(" i am returning from here this", err)
|
||||
return nil, err
|
||||
}
|
||||
if excludeFile(fullPath, buildcontext) {
|
||||
|
|
@ -545,7 +546,7 @@ func CopySymlink(src, dest, buildcontext string) (bool, error) {
|
|||
logrus.Debugf("%s found in .dockerignore, ignoring", src)
|
||||
return true, nil
|
||||
}
|
||||
link, err := filepath.EvalSymlinks(src)
|
||||
link, err := os.Readlink(src)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
|
@ -693,17 +694,31 @@ func IsSymlink(fi os.FileInfo) bool {
|
|||
|
||||
var ErrNotSymLink = fmt.Errorf("not a symlink")
|
||||
|
||||
func CanonicalizeLink(path string) (string, error) {
|
||||
fi, err := os.Lstat(path)
|
||||
if err != nil {
|
||||
func GetSymLink(path string) (string, error) {
|
||||
if err := getSymlink(path); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return os.Readlink(path)
|
||||
}
|
||||
|
||||
func EvalSymLink(path string) (string, error) {
|
||||
if err := getSymlink(path); err != nil {
|
||||
return "", err
|
||||
}
|
||||
if !IsSymlink(fi) {
|
||||
return "", ErrNotSymLink
|
||||
}
|
||||
return filepath.EvalSymlinks(path)
|
||||
}
|
||||
|
||||
func getSymlink(path string) error {
|
||||
fi, err := os.Lstat(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !IsSymlink(fi) {
|
||||
return ErrNotSymLink
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// otiai10Cpy.Copy in case the src file is a symlink, will copy the target
|
||||
// file at destination instead of creating a symlink. See #915 for more details.
|
||||
func CopyFileOrSymlink(src string, destDir string) error {
|
||||
|
|
|
|||
Loading…
Reference in New Issue