summaryrefslogtreecommitdiff
path: root/internal/iohelpers
diff options
context:
space:
mode:
authorDave Henderson <dhenderson@gmail.com>2022-01-09 14:45:24 -0500
committerDave Henderson <dhenderson@gmail.com>2022-02-13 11:53:47 -0500
commit4510ec9c9e9b1cdce83ec893dfe2aebfdd5db8d7 (patch)
tree831048f23820fe9c3c8749bedbbf839a4a546621 /internal/iohelpers
parent839e8973475f1f0bdc05657ea13cd23a16d85cd8 (diff)
Ensure output file paths exist
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'internal/iohelpers')
-rw-r--r--internal/iohelpers/filemode.go6
-rw-r--r--internal/iohelpers/filemode_test.go4
2 files changed, 8 insertions, 2 deletions
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))
}