◐ Shell
clean mode source ↗

Issue 3016: tarfile.py incurs exception from self.chmod() when tarball has g+s

As reported at https://bugs.launchpad.net/pyopenssl/+bug/236190 ,
tarfile.py incurs an "Operation not permitted" exception (on Mac OS
10.4) when it tries to untar the pyOpenSSL-0.6.tar.gz tarball, because
that tarball has directories in it marked as having the "g+s" bit.

(Why this leads to an "Operation not permitted" exception, I don't know.)
With some effort I could reproduce the problem (on a FAT32 filesystem),
but what we have here is clearly a usage problem. In unpack_tarfile() in
setuptools/archive_util.py TarFile's internal _extract_member() method
is used to extract the contents. For every non-fatal error (like a
failing chmod()) _extract_member() raises an ExtractError exception. In
TarFile.extract() these ExtractErrors are normally ignored. The
unpack_tarfile() function in setuptools needs some fixing, it should
either act more like TarFile.extract() or better use the public API.