@@ -74,14 +74,32 @@ def bar():
74
74
def test_executable_bit (sdist_executable_bit ):
75
75
sdist = tarfile .open (sdist_executable_bit , 'r:gz' )
76
76
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 ,
87
84
}
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