From 4510ec9c9e9b1cdce83ec893dfe2aebfdd5db8d7 Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Sun, 9 Jan 2022 14:45:24 -0500 Subject: Ensure output file paths exist Signed-off-by: Dave Henderson --- internal/iohelpers/filemode.go | 6 ++++-- internal/iohelpers/filemode_test.go | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'internal/iohelpers') diff --git a/internal/iohelpers/filemode.go b/internal/iohelpers/filemode.go index 35a3c142..7ac0e3df 100644 --- a/internal/iohelpers/filemode.go +++ b/internal/iohelpers/filemode.go @@ -17,8 +17,10 @@ func NormalizeFileMode(mode os.FileMode) os.FileMode { } func windowsFileMode(mode os.FileMode) os.FileMode { - // non-owner and execute bits are stripped - mode &^= 0o177 + // non-owner and execute bits are stripped on files + if !mode.IsDir() { + mode &^= 0o177 + } if mode&0o200 != 0 { // writeable implies read/write on Windows diff --git a/internal/iohelpers/filemode_test.go b/internal/iohelpers/filemode_test.go index 2ebb0ed7..8a7c9a2e 100644 --- a/internal/iohelpers/filemode_test.go +++ b/internal/iohelpers/filemode_test.go @@ -2,6 +2,7 @@ package iohelpers import ( "fmt" + "io/fs" "os" "testing" @@ -34,4 +35,7 @@ func TestWindowsFileMode(t *testing.T) { assert.Equal(t, fmt.Sprintf("%o", d.expected), fmt.Sprintf("%o", actual)) assert.Equal(t, d.expected, actual) } + + // directories are always 0777 + assert.Equal(t, 0o777|fs.ModeDir, windowsFileMode(0o755|fs.ModeDir)) } -- cgit v1.2.3