Commit 766d1fbd authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #16314: Added support for the LZMA compression in distutils.

parent 2ce0b4fa
...@@ -57,26 +57,28 @@ def make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, ...@@ -57,26 +57,28 @@ def make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0,
"""Create a (possibly compressed) tar file from all the files under """Create a (possibly compressed) tar file from all the files under
'base_dir'. 'base_dir'.
'compress' must be "gzip" (the default), "compress", "bzip2", or None. 'compress' must be "gzip" (the default), "bzip2", "xz", "compress", or
(compress will be deprecated in Python 3.2) None. ("compress" will be deprecated in Python 3.2)
'owner' and 'group' can be used to define an owner and a group for the 'owner' and 'group' can be used to define an owner and a group for the
archive that is being built. If not provided, the current owner and group archive that is being built. If not provided, the current owner and group
will be used. will be used.
The output tar file will be named 'base_dir' + ".tar", possibly plus The output tar file will be named 'base_dir' + ".tar", possibly plus
the appropriate compression extension (".gz", ".bz2" or ".Z"). the appropriate compression extension (".gz", ".bz2", ".xz" or ".Z").
Returns the output filename. Returns the output filename.
""" """
tar_compression = {'gzip': 'gz', 'bzip2': 'bz2', None: '', 'compress': ''} tar_compression = {'gzip': 'gz', 'bzip2': 'bz2', 'xz': 'xz', None: '',
compress_ext = {'gzip': '.gz', 'bzip2': '.bz2', 'compress': '.Z'} 'compress': ''}
compress_ext = {'gzip': '.gz', 'bzip2': '.bz2', 'xz': '.xz',
'compress': '.Z'}
# flags for compression program, each element of list will be an argument # flags for compression program, each element of list will be an argument
if compress is not None and compress not in compress_ext.keys(): if compress is not None and compress not in compress_ext.keys():
raise ValueError( raise ValueError(
"bad value for 'compress': must be None, 'gzip', 'bzip2' " "bad value for 'compress': must be None, 'gzip', 'bzip2', "
"or 'compress'") "'xz' or 'compress'")
archive_name = base_name + '.tar' archive_name = base_name + '.tar'
if compress != 'compress': if compress != 'compress':
...@@ -177,6 +179,7 @@ def make_zipfile(base_name, base_dir, verbose=0, dry_run=0): ...@@ -177,6 +179,7 @@ def make_zipfile(base_name, base_dir, verbose=0, dry_run=0):
ARCHIVE_FORMATS = { ARCHIVE_FORMATS = {
'gztar': (make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), 'gztar': (make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"),
'bztar': (make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"), 'bztar': (make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"),
'xztar': (make_tarball, [('compress', 'xz')], "xz'ed tar-file"),
'ztar': (make_tarball, [('compress', 'compress')], "compressed tar file"), 'ztar': (make_tarball, [('compress', 'compress')], "compressed tar file"),
'tar': (make_tarball, [('compress', None)], "uncompressed tar file"), 'tar': (make_tarball, [('compress', None)], "uncompressed tar file"),
'zip': (make_zipfile, [],"ZIP file") 'zip': (make_zipfile, [],"ZIP file")
...@@ -197,8 +200,8 @@ def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, ...@@ -197,8 +200,8 @@ def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,
"""Create an archive file (eg. zip or tar). """Create an archive file (eg. zip or tar).
'base_name' is the name of the file to create, minus any format-specific 'base_name' is the name of the file to create, minus any format-specific
extension; 'format' is the archive format: one of "zip", "tar", "ztar", extension; 'format' is the archive format: one of "zip", "tar", "gztar",
or "gztar". "bztar", "xztar", or "ztar".
'root_dir' is a directory that will be the root directory of the 'root_dir' is a directory that will be the root directory of the
archive; ie. we typically chdir into 'root_dir' before creating the archive; ie. we typically chdir into 'root_dir' before creating the
......
...@@ -61,13 +61,14 @@ class bdist(Command): ...@@ -61,13 +61,14 @@ class bdist(Command):
'nt': 'zip'} 'nt': 'zip'}
# Establish the preferred order (for the --help-formats option). # Establish the preferred order (for the --help-formats option).
format_commands = ['rpm', 'gztar', 'bztar', 'ztar', 'tar', format_commands = ['rpm', 'gztar', 'bztar', 'xztar', 'ztar', 'tar',
'wininst', 'zip', 'msi'] 'wininst', 'zip', 'msi']
# And the real information. # And the real information.
format_command = {'rpm': ('bdist_rpm', "RPM distribution"), format_command = {'rpm': ('bdist_rpm', "RPM distribution"),
'gztar': ('bdist_dumb', "gzip'ed tar file"), 'gztar': ('bdist_dumb', "gzip'ed tar file"),
'bztar': ('bdist_dumb', "bzip2'ed tar file"), 'bztar': ('bdist_dumb', "bzip2'ed tar file"),
'xztar': ('bdist_dumb', "xz'ed tar file"),
'ztar': ('bdist_dumb', "compressed tar file"), 'ztar': ('bdist_dumb', "compressed tar file"),
'tar': ('bdist_dumb', "tar file"), 'tar': ('bdist_dumb', "tar file"),
'wininst': ('bdist_wininst', 'wininst': ('bdist_wininst',
......
...@@ -22,7 +22,8 @@ class bdist_dumb(Command): ...@@ -22,7 +22,8 @@ class bdist_dumb(Command):
"platform name to embed in generated filenames " "platform name to embed in generated filenames "
"(default: %s)" % get_platform()), "(default: %s)" % get_platform()),
('format=', 'f', ('format=', 'f',
"archive format to create (tar, ztar, gztar, zip)"), "archive format to create (tar, gztar, bztar, xztar, "
"ztar, zip)"),
('keep-temp', 'k', ('keep-temp', 'k',
"keep the pseudo-installation tree around after " + "keep the pseudo-installation tree around after " +
"creating the distribution archive"), "creating the distribution archive"),
......
This diff is collapsed.
...@@ -21,7 +21,7 @@ class BuildTestCase(support.TempdirManager, ...@@ -21,7 +21,7 @@ class BuildTestCase(support.TempdirManager,
# what formats does bdist offer? # what formats does bdist offer?
formats = ['bztar', 'gztar', 'msi', 'rpm', 'tar', formats = ['bztar', 'gztar', 'msi', 'rpm', 'tar',
'wininst', 'zip', 'ztar'] 'wininst', 'xztar', 'zip', 'ztar']
found = sorted(cmd.format_command) found = sorted(cmd.format_command)
self.assertEqual(found, formats) self.assertEqual(found, formats)
......
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