archive: replace tarName() with filepath.ToSlash()
This code was copied from github.com/moby/moby/pkg/archive;28842d3f09
, which got later simplified ina5aed699cf
This patch aligns the containerd implementation with those changes, and uses filepath.ToSlash() unconditionally on all platforms, as it's a no-op on platforms that use a forward-slash; https://github.com/golang/go/blob/go1.19/src/path/filepath/path.go#L175-L183 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
bf8cdc2918
commit
19db697a5a
@ -574,11 +574,9 @@ func (cw *ChangeWriter) HandleChange(k fs.ChangeKind, p string, f os.FileInfo, e
|
|||||||
return fmt.Errorf("failed to make path relative: %w", err)
|
return fmt.Errorf("failed to make path relative: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
name, err = tarName(name)
|
// Canonicalize to POSIX-style paths using forward slashes. Directory
|
||||||
if err != nil {
|
// entries must end with a slash.
|
||||||
return fmt.Errorf("cannot canonicalize path: %w", err)
|
name = filepath.ToSlash(name)
|
||||||
}
|
|
||||||
// suffix with '/' for directories
|
|
||||||
if f.IsDir() && !strings.HasSuffix(name, "/") {
|
if f.IsDir() && !strings.HasSuffix(name, "/") {
|
||||||
name += "/"
|
name += "/"
|
||||||
}
|
}
|
||||||
|
@ -34,10 +34,6 @@ import (
|
|||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
func tarName(p string) (string, error) {
|
|
||||||
return p, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func chmodTarEntry(perm os.FileMode) os.FileMode {
|
func chmodTarEntry(perm os.FileMode) os.FileMode {
|
||||||
return perm
|
return perm
|
||||||
}
|
}
|
||||||
|
@ -26,21 +26,6 @@ import (
|
|||||||
"github.com/containerd/containerd/sys"
|
"github.com/containerd/containerd/sys"
|
||||||
)
|
)
|
||||||
|
|
||||||
// tarName returns platform-specific filepath
|
|
||||||
// to canonical posix-style path for tar archival. p is relative
|
|
||||||
// path.
|
|
||||||
func tarName(p string) (string, error) {
|
|
||||||
// windows: convert windows style relative path with backslashes
|
|
||||||
// into forward slashes. Since windows does not allow '/' or '\'
|
|
||||||
// in file names, it is mostly safe to replace however we must
|
|
||||||
// check just in case
|
|
||||||
if strings.Contains(p, "/") {
|
|
||||||
return "", fmt.Errorf("windows path contains forward slash: %s", p)
|
|
||||||
}
|
|
||||||
|
|
||||||
return strings.Replace(p, string(os.PathSeparator), "/", -1), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// chmodTarEntry is used to adjust the file permissions used in tar header based
|
// chmodTarEntry is used to adjust the file permissions used in tar header based
|
||||||
// on the platform the archival is done.
|
// on the platform the archival is done.
|
||||||
func chmodTarEntry(perm os.FileMode) os.FileMode {
|
func chmodTarEntry(perm os.FileMode) os.FileMode {
|
||||||
|
Loading…
Reference in New Issue
Block a user