diff --git a/integration/dockerfiles/Dockerfile_test_replaced_hardlinks b/integration/dockerfiles/Dockerfile_test_replaced_hardlinks new file mode 100644 index 000000000..78ca22b11 --- /dev/null +++ b/integration/dockerfiles/Dockerfile_test_replaced_hardlinks @@ -0,0 +1 @@ +FROM jboss/base-jdk@sha256:70d956f632c26d1f1df57cbb99870a6141cfe470de0eb2d51bccd44929df9367 diff --git a/integration/dockerfiles/Dockerfile_test_replaced_symlinks b/integration/dockerfiles/Dockerfile_test_replaced_symlinks new file mode 100644 index 000000000..70e3d1f2b --- /dev/null +++ b/integration/dockerfiles/Dockerfile_test_replaced_symlinks @@ -0,0 +1,2 @@ +FROM tenstartups/alpine@sha256:31dc8b12e0f73a1de899146c3663644b7668f8fd198cfe9b266886c9abfa944b +RUN pwd diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index 3e45c69c1..b7c2baddf 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -186,6 +186,13 @@ func extractFile(dest string, hdr *tar.Header, tr io.Reader) error { return err } } + // Check if something already exists at path (symlinks etc.) + // If so, delete it + if FilepathExists(path) { + if err := os.Remove(path); err != nil { + return errors.Wrapf(err, "error removing %s to make way for new file.", path) + } + } currFile, err := os.Create(path) if err != nil { return err @@ -220,6 +227,14 @@ func extractFile(dest string, hdr *tar.Header, tr io.Reader) error { if err := os.MkdirAll(dir, 0755); err != nil { return err } + // Check if something already exists at path + // If so, delete it + if FilepathExists(path) { + if err := os.Remove(path); err != nil { + return errors.Wrapf(err, "error removing %s to make way for new link", hdr.Name) + } + } + if err := os.Link(filepath.Clean(filepath.Join("/", hdr.Linkname)), path); err != nil { return err }