Commit 56507a08 authored by Andrew M. Kuchling's avatar Andrew M. Kuchling

Fix for bug #410541: bdist builds bogus .zips

This adds a --relative option to the bdist_dumb command that defaults
to false; if true, the .tar.gz or .zip will be assembled using relative
paths.
parent 7e77495f
...@@ -11,7 +11,7 @@ __revision__ = "$Id$" ...@@ -11,7 +11,7 @@ __revision__ = "$Id$"
import os import os
from distutils.core import Command from distutils.core import Command
from distutils.util import get_platform from distutils.util import get_platform
from distutils.dir_util import create_tree, remove_tree from distutils.dir_util import create_tree, remove_tree, ensure_relative
from distutils.errors import * from distutils.errors import *
from distutils import log from distutils import log
...@@ -33,9 +33,12 @@ class bdist_dumb (Command): ...@@ -33,9 +33,12 @@ class bdist_dumb (Command):
"directory to put final built distributions in"), "directory to put final built distributions in"),
('skip-build', None, ('skip-build', None,
"skip rebuilding everything (for testing/debugging)"), "skip rebuilding everything (for testing/debugging)"),
('relative', None,
"build the archive using relative paths"
"(default: false)"),
] ]
boolean_options = ['keep-temp', 'skip-build'] boolean_options = ['keep-temp', 'skip-build', 'relative']
default_format = { 'posix': 'gztar', default_format = { 'posix': 'gztar',
'nt': 'zip', 'nt': 'zip',
...@@ -49,7 +52,8 @@ class bdist_dumb (Command): ...@@ -49,7 +52,8 @@ class bdist_dumb (Command):
self.keep_temp = 0 self.keep_temp = 0
self.dist_dir = None self.dist_dir = None
self.skip_build = 0 self.skip_build = 0
self.relative = 0
# initialize_options() # initialize_options()
...@@ -97,9 +101,24 @@ class bdist_dumb (Command): ...@@ -97,9 +101,24 @@ class bdist_dumb (Command):
if os.name == "os2": if os.name == "os2":
archive_basename = archive_basename.replace(":", "-") archive_basename = archive_basename.replace(":", "-")
self.make_archive(os.path.join(self.dist_dir, archive_basename), pseudoinstall_root = os.path.join(self.dist_dir, archive_basename)
self.format, if not self.relative:
root_dir=self.bdist_dir) archive_root = self.bdist_dir
else:
if (self.distribution.has_ext_modules() and
(install.install_base != install.install_platbase)):
raise DistutilsPlatformError, \
("can't make a dumb built distribution where "
"base and platbase are different (%s, %s)"
% (repr(install.install_base),
repr(install.install_platbase)))
else:
archive_root = os.path.join(self.bdist_dir,
ensure_relative(install.install_base))
# Make the archive
self.make_archive(pseudoinstall_root,
self.format, root_dir=archive_root)
if not self.keep_temp: if not self.keep_temp:
remove_tree(self.bdist_dir, dry_run=self.dry_run) remove_tree(self.bdist_dir, dry_run=self.dry_run)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment