Skip to content

Commit

Permalink
Try to fix `python setup.py bdist_dumb' on Mac OS X (paylogic/pip-acc…
Browse files Browse the repository at this point in the history
…el#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.
  • Loading branch information
xolox committed Sep 5, 2015
1 parent 7a6e89b commit 6c5df36
Showing 1 changed file with 52 additions and 5 deletions.
57 changes: 52 additions & 5 deletions setup_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,42 @@
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.
Expand Down Expand Up @@ -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],
Expand Down

0 comments on commit 6c5df36

Please sign in to comment.