Skip to content

Commit d18930f

Browse files
rgommersFFY00
authored andcommitted
TST: one more fix for executable bit test
This was failing when building in Docker, see conda-forge/meson-python-feedstock#7
1 parent e8c141c commit d18930f

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

tests/test_sdist.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,32 @@ def bar():
7474
def test_executable_bit(sdist_executable_bit):
7575
sdist = tarfile.open(sdist_executable_bit, 'r:gz')
7676

77-
assert set((tar.name, tar.mode) for tar in sdist.getmembers()) == {
78-
('executable_bit-1.0.0/PKG-INFO', 420),
79-
# We match the executable bit on everything
80-
# but PKG-INFO(we create this ourselves)
81-
# Note: File perms are in octal, but Python returns it in int
82-
('executable_bit-1.0.0/example-script.py', int('755', 8)),
83-
('executable_bit-1.0.0/example.c', int('644', 8)),
84-
('executable_bit-1.0.0/executable_module.py', int('755', 8)),
85-
('executable_bit-1.0.0/meson.build', int('644', 8)),
86-
('executable_bit-1.0.0/pyproject.toml', int('644', 8)),
77+
expected = {
78+
'executable_bit-1.0.0/PKG-INFO': None,
79+
'executable_bit-1.0.0/example-script.py': True,
80+
'executable_bit-1.0.0/example.c': False,
81+
'executable_bit-1.0.0/executable_module.py': True,
82+
'executable_bit-1.0.0/meson.build': False,
83+
'executable_bit-1.0.0/pyproject.toml': False,
8784
}
85+
assert set(tar.name for tar in sdist.getmembers()) == set(expected.keys())
86+
87+
def has_execbit(mode):
88+
# Note: File perms are in octal, but Python returns it in int
89+
# We check multiple modes, because Docker may set group permissions to
90+
# match owner permissions
91+
modes_execbit = 0o755, 0o775
92+
modes_nonexecbit = 0o644, 0o664
93+
if mode in modes_execbit:
94+
return True
95+
elif mode in modes_nonexecbit:
96+
return False
97+
else:
98+
raise RuntimeError(f'Unknown file permissions mode: {mode}')
99+
100+
for name, mode in set((tar.name, tar.mode) for tar in sdist.getmembers()):
101+
if 'PKG-INFO' in name:
102+
# We match the executable bit on everything but PKG-INFO (we create
103+
# this ourselves)
104+
continue
105+
assert has_execbit(mode) == expected[name], f'Wrong mode for {name}: {mode}'

0 commit comments

Comments
 (0)