Respect tar entries modes when rewriting them on Windows
Previously, only perm-related bits where preserved when rewriting FileMode in tar entries on Windows. This had the nasty side effect of having tarsum returning different values when executing from a tar filed produced on Windows or Linux. This fix the issue, and pave the way for incremental build context to work in hybrid contexts. Signed-off-by: Simon Ferquel <simon.ferquel@docker.com> Upstream-commit: 41eb61d5c2a44c745b11ada948034fd3bcc42db5 Component: engine
This commit is contained in:
@@ -42,11 +42,14 @@ func CanonicalTarNameForPath(p string) (string, error) {
|
||||
// chmodTarEntry is used to adjust the file permissions used in tar header based
|
||||
// on the platform the archival is done.
|
||||
func chmodTarEntry(perm os.FileMode) os.FileMode {
|
||||
perm &= 0755
|
||||
//perm &= 0755 // this 0-ed out tar flags (like link, regular file, directory marker etc.)
|
||||
permPart := perm & os.ModePerm
|
||||
noPermPart := perm &^ os.ModePerm
|
||||
// Add the x bit: make everything +x from windows
|
||||
perm |= 0111
|
||||
permPart |= 0111
|
||||
permPart &= 0755
|
||||
|
||||
return perm
|
||||
return noPermPart | permPart
|
||||
}
|
||||
|
||||
func setHeaderForSpecialDevice(hdr *tar.Header, name string, stat interface{}) (err error) {
|
||||
|
||||
@@ -82,6 +82,8 @@ func TestChmodTarEntry(t *testing.T) {
|
||||
{0644, 0755},
|
||||
{0755, 0755},
|
||||
{0444, 0555},
|
||||
{0755 | os.ModeDir, 0755 | os.ModeDir},
|
||||
{0755 | os.ModeSymlink, 0755 | os.ModeSymlink},
|
||||
}
|
||||
for _, v := range cases {
|
||||
if out := chmodTarEntry(v.in); out != v.expected {
|
||||
|
||||
Reference in New Issue
Block a user