summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorPeter Odding <peter@peterodding.com>2015-09-05 17:57:45 +0200
committerPeter Odding <peter@peterodding.com>2015-09-05 17:57:45 +0200
commit6c5df3650a90ca2567e6f865de237c5fb1fadf5d (patch)
treee2f57b0a0df78d1bd8a8417b7c3a28e19639163e
parent7a6e89bcbd75c495205ddf7520c044000c2e6a65 (diff)
Try to fix `python setup.py bdist_dumb' on Mac OS X (paylogic/pip-accel#2)
Additions based on /usr/lib/python2.7/distutils/archive_util.py from the Ubuntu 12.04 package python2.7 (2.7.3-0ubuntu3.8). I have not looked into the compatibility of the software licenses of Paramiko vs distutils however the original setup_helper.py code in Paramiko was clearly also copied from distutils so to be honest it's not like I'm changing the status quo.
-rw-r--r--setup_helper.py57
1 files changed, 52 insertions, 5 deletions
diff --git a/setup_helper.py b/setup_helper.py
index ff6b0e16..5d23137b 100644
--- a/setup_helper.py
+++ b/setup_helper.py
@@ -30,9 +30,42 @@ import distutils.archive_util
from distutils.dir_util import mkpath
from distutils.spawn import spawn
-
-def make_tarball(base_name, base_dir, compress='gzip',
- verbose=False, dry_run=False):
+try:
+ from pwd import getpwnam
+except ImportError:
+ getpwnam = None
+
+try:
+ from grp import getgrnam
+except ImportError:
+ getgrnam = None
+
+def _get_gid(name):
+ """Returns a gid, given a group name."""
+ if getgrnam is None or name is None:
+ return None
+ try:
+ result = getgrnam(name)
+ except KeyError:
+ result = None
+ if result is not None:
+ return result[2]
+ return None
+
+def _get_uid(name):
+ """Returns an uid, given a user name."""
+ if getpwnam is None or name is None:
+ return None
+ try:
+ result = getpwnam(name)
+ except KeyError:
+ result = None
+ if result is not None:
+ return result[2]
+ return None
+
+def make_tarball(base_name, base_dir, compress='gzip', verbose=0, dry_run=0,
+ owner=None, group=None):
"""Create a tar file from all the files under 'base_dir'.
This file may be compressed.
@@ -75,11 +108,25 @@ def make_tarball(base_name, base_dir, compress='gzip',
mkpath(os.path.dirname(archive_name), dry_run=dry_run)
log.info('Creating tar file %s with mode %s' % (archive_name, mode))
+ uid = _get_uid(owner)
+ gid = _get_gid(group)
+
+ def _set_uid_gid(tarinfo):
+ if gid is not None:
+ tarinfo.gid = gid
+ tarinfo.gname = group
+ if uid is not None:
+ tarinfo.uid = uid
+ tarinfo.uname = owner
+ return tarinfo
+
if not dry_run:
tar = tarfile.open(archive_name, mode=mode)
# This recursively adds everything underneath base_dir
- tar.add(base_dir)
- tar.close()
+ try:
+ tar.add(base_dir, filter=_set_uid_gid)
+ finally:
+ tar.close()
if compress and compress not in tarfile_compress_flag:
spawn([compress] + compress_flags[compress] + [archive_name],