From f535e0f0d7ecbc027f366d69f75b2b8ec39d1b2d Mon Sep 17 00:00:00 2001 From: Oleksandr Redko Date: Sat, 6 Jan 2024 23:12:09 +0200 Subject: [PATCH 1/3] Remove github.com/otiai10/copy dependency Signed-off-by: Oleksandr Redko --- go.mod | 1 - go.sum | 3 -- oci/layout/oci_delete_test.go | 63 +++++++++++++++++++++++++++++++++-- 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index b6c19aeaf2..26922d492b 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,6 @@ require ( github.com/opencontainers/image-spec v1.1.0-rc5 github.com/opencontainers/selinux v1.11.0 github.com/ostreedev/ostree-go v0.0.0-20210805093236-719684c64e4f - github.com/otiai10/copy v1.14.0 github.com/proglottis/gpgme v0.1.3 github.com/secure-systems-lab/go-securesystemslib v0.8.0 github.com/sigstore/fulcio v1.4.3 diff --git a/go.sum b/go.sum index 6619f520d7..0e69a95d5e 100644 --- a/go.sum +++ b/go.sum @@ -305,9 +305,6 @@ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+ github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/ostreedev/ostree-go v0.0.0-20210805093236-719684c64e4f h1:/UDgs8FGMqwnHagNDPGOlts35QkhAZ8by3DR7nMih7M= github.com/ostreedev/ostree-go v0.0.0-20210805093236-719684c64e4f/go.mod h1:J6OG6YJVEWopen4avK3VNQSnALmmjvniMmni/YFYAwc= -github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= -github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= -github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/oci/layout/oci_delete_test.go b/oci/layout/oci_delete_test.go index 7e06456ffd..280f488d52 100644 --- a/oci/layout/oci_delete_test.go +++ b/oci/layout/oci_delete_test.go @@ -2,7 +2,7 @@ package layout import ( "context" - "fmt" + "io" "os" "path/filepath" "testing" @@ -10,7 +10,6 @@ import ( "github.com/containers/image/v5/types" digest "github.com/opencontainers/go-digest" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - cp "github.com/otiai10/copy" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -276,7 +275,7 @@ func TestReferenceDeleteImage_multipleImages_twoIdenticalReferences(t *testing.T func loadFixture(t *testing.T, fixtureName string) string { tmpDir := t.TempDir() - err := cp.Copy(fmt.Sprintf("fixtures/%v/", fixtureName), tmpDir) + err := copyDir(filepath.Join("fixtures", fixtureName), tmpDir) require.NoError(t, err) return tmpDir } @@ -296,3 +295,61 @@ func assertBlobDoesNotExist(t *testing.T, blobsDir string, blobDigest string) { _, err = os.Stat(blobPath) require.True(t, os.IsNotExist(err)) } + +// copyDir copies a whole directory src recursively to dst. +func copyDir(src, dst string) error { + info, err := os.Stat(src) + if err != nil { + return err + } + + if err := os.MkdirAll(dst, info.Mode()); err != nil { + return err + } + + dirEntries, err := os.ReadDir(src) + if err != nil { + return err + } + + for _, dirEntry := range dirEntries { + srcPath := filepath.Join(src, dirEntry.Name()) + dstPath := filepath.Join(dst, dirEntry.Name()) + + copy := copyFile + if dirEntry.IsDir() { + copy = copyDir + } + + if err := copy(srcPath, dstPath); err != nil { + return err + } + } + return nil +} + +// copyFile copies src file to dst file. +func copyFile(src, dst string) error { + srcFile, err := os.Open(src) + if err != nil { + return err + } + defer srcFile.Close() + + dstFile, err := os.Create(dst) + if err != nil { + return err + } + defer dstFile.Close() + + if _, err := io.Copy(dstFile, srcFile); err != nil { + return err + } + + info, err := os.Stat(src) + if err != nil { + return err + } + + return os.Chmod(dst, info.Mode()) +} From 42d49405a057a4b050d556d8a006dd1b259df9d0 Mon Sep 17 00:00:00 2001 From: Oleksandr Redko Date: Tue, 9 Jan 2024 19:03:50 +0200 Subject: [PATCH 2/3] Review comments --- oci/layout/oci_delete_test.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/oci/layout/oci_delete_test.go b/oci/layout/oci_delete_test.go index 280f488d52..5975b6fcde 100644 --- a/oci/layout/oci_delete_test.go +++ b/oci/layout/oci_delete_test.go @@ -316,12 +316,13 @@ func copyDir(src, dst string) error { srcPath := filepath.Join(src, dirEntry.Name()) dstPath := filepath.Join(dst, dirEntry.Name()) - copy := copyFile + var err error if dirEntry.IsDir() { - copy = copyDir + err = copyDir(srcPath, dstPath) + } else { + err = copyFile(srcPath, dstPath) } - - if err := copy(srcPath, dstPath); err != nil { + if err != nil { return err } } From e11c676ae404f9f2c78afb553b5e69dc1dbab2f4 Mon Sep 17 00:00:00 2001 From: Oleksandr Redko Date: Tue, 9 Jan 2024 19:22:30 +0200 Subject: [PATCH 3/3] Refactor to filepath.WalkDir --- oci/layout/oci_delete_test.go | 39 +++++++++++++---------------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/oci/layout/oci_delete_test.go b/oci/layout/oci_delete_test.go index 5975b6fcde..841635e4c7 100644 --- a/oci/layout/oci_delete_test.go +++ b/oci/layout/oci_delete_test.go @@ -3,6 +3,7 @@ package layout import ( "context" "io" + "io/fs" "os" "path/filepath" "testing" @@ -298,35 +299,23 @@ func assertBlobDoesNotExist(t *testing.T, blobsDir string, blobDigest string) { // copyDir copies a whole directory src recursively to dst. func copyDir(src, dst string) error { - info, err := os.Stat(src) - if err != nil { - return err - } - - if err := os.MkdirAll(dst, info.Mode()); err != nil { - return err - } - - dirEntries, err := os.ReadDir(src) - if err != nil { - return err - } - - for _, dirEntry := range dirEntries { - srcPath := filepath.Join(src, dirEntry.Name()) - dstPath := filepath.Join(dst, dirEntry.Name()) - - var err error - if dirEntry.IsDir() { - err = copyDir(srcPath, dstPath) - } else { - err = copyFile(srcPath, dstPath) + return filepath.WalkDir(src, func(srcPath string, srcDirEntry fs.DirEntry, err error) error { + if err != nil { + return err } + + srcRel, err := filepath.Rel(src, srcPath) if err != nil { return err } - } - return nil + + dstPath := filepath.Join(dst, srcRel) + if srcDirEntry.IsDir() { + return os.MkdirAll(dstPath, os.ModePerm) + } + + return copyFile(srcPath, dstPath) + }) } // copyFile copies src file to dst file.