Skip to content

Commit d747bcf

Browse files
committed
osfs: max out defaultDirectoryMode
a reprise of go-git#104, with added tests Limited the scope of the CreateWithChroot tests to OsFs, because MemFs creates parent directories with bonkers permissions. drive-by: add Makefile variables for `make test-coverage` to run successfully
1 parent 70ef9bf commit d747bcf

File tree

5 files changed

+46
-4
lines changed

5 files changed

+46
-4
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
/coverage.txt
1+
/coverage.*
22
/vendor
33
/build/

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ GOCMD = go
33
GOTEST = $(GOCMD) test
44
WASIRUN_WRAPPER := $(CURDIR)/scripts/wasirun-wrapper
55

6+
# Coverage
7+
COVERAGE_REPORT := coverage.out
8+
COVERAGE_MODE := count
9+
610
GOLANGCI_VERSION ?= v1.64.5
711
TOOLS_BIN := $(shell mkdir -p build/tools && realpath build/tools)
812

osfs/os.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
)
1515

1616
const (
17-
defaultDirectoryMode = 0o755
17+
defaultDirectoryMode = 0o777
1818
defaultCreateMode = 0o666
1919
)
2020

osfs/os_bound_test.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,8 +1285,24 @@ func TestRename(t *testing.T) {
12851285
require.NoError(t, err)
12861286
require.NoError(t, f.Close())
12871287

1288-
err = fs.Rename(oldFile, newFile)
1289-
require.NoError(t, err)
1288+
if runtime.GOOS != "windows" {
1289+
reset_umask := umask(2)
1290+
err = fs.Rename(oldFile, newFile)
1291+
require.NoError(t, err)
1292+
reset_umask()
1293+
1294+
di, err := os.Stat(filepath.Dir(filepath.Join(dir, newFile)))
1295+
require.NoError(t, err)
1296+
assert.NotNil(di)
1297+
expected := 0o775
1298+
actual := int(di.Mode().Perm())
1299+
assert.Equal(
1300+
expected, actual, "Permission mismatch - expected: 0o%o, actual: 0o%o", expected, actual,
1301+
)
1302+
} else {
1303+
err = fs.Rename(oldFile, newFile)
1304+
require.NoError(t, err)
1305+
}
12901306

12911307
fi, err := os.Stat(filepath.Join(dir, newFile))
12921308
require.NoError(t, err)

osfs/os_chroot_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,25 @@ func TestCapabilities(t *testing.T) {
4747
caps := billy.Capabilities(fs)
4848
assert.Equal(t, billy.AllCapabilities, caps)
4949
}
50+
51+
func TestCreateWithChroot(t *testing.T) {
52+
if runtime.GOOS == "windows" {
53+
t.Skip("Skipping POSIX umask tests on Windows")
54+
}
55+
fs, _ := setup(t)
56+
reset_umask := umask(2)
57+
chroot, _ := fs.Chroot("foo")
58+
f, err := chroot.Create("bar")
59+
require.NoError(t, err)
60+
require.NoError(t, f.Close())
61+
assert.Equal(t, f.Name(), "bar")
62+
reset_umask()
63+
64+
di, err := fs.Stat("foo")
65+
require.NoError(t, err)
66+
expected := 0o775
67+
actual := int(di.Mode().Perm())
68+
assert.Equal(
69+
t, expected, actual, "Permission mismatch - expected: 0o%o, actual: 0o%o", expected, actual,
70+
)
71+
}

0 commit comments

Comments
 (0)