archive: add XZ support if built with Python 3
authorDavid Demelier <markand@malikania.fr>
Tue, 17 Sep 2019 10:47:31 +0000
changeset 42944 c04e0836f039
parent 42943 06080afd0565
child 42945 3a1ad3aeb64a
archive: add XZ support if built with Python 3
mercurial/archival.py
mercurial/commands.py
tests/test-archive.t
--- a/mercurial/archival.py	Sun Sep 15 22:43:32 2019 +0900
+++ b/mercurial/archival.py	Tue Sep 17 10:47:31 2019 +0000
@@ -67,6 +67,7 @@
     'tbz2': ['.tbz2', '.tar.bz2'],
     'tgz': ['.tgz', '.tar.gz'],
     'zip': ['.zip'],
+    'txz': ['.txz', '.tar.xz']
     }
 
 def guesskind(dest):
@@ -270,6 +271,7 @@
     'tar': tarit,
     'tbz2': lambda name, mtime: tarit(name, mtime, 'bz2'),
     'tgz': lambda name, mtime: tarit(name, mtime, 'gz'),
+    'txz': lambda name, mtime: tarit(name, mtime, 'xz'),
     'uzip': lambda name, mtime: zipit(name, mtime, False),
     'zip': zipit,
     }
@@ -295,6 +297,9 @@
     subrepos tells whether to include subrepos.
     '''
 
+    if kind == 'txz' and not pycompat.ispy3:
+        raise error.Abort(_('xz compression is only available in Python 3'))
+
     if kind == 'files':
         if prefix:
             raise error.Abort(_('cannot give prefix when archiving to files'))
--- a/mercurial/commands.py	Sun Sep 15 22:43:32 2019 +0900
+++ b/mercurial/commands.py	Tue Sep 17 10:47:31 2019 +0000
@@ -514,6 +514,7 @@
     :``tar``:   tar archive, uncompressed
     :``tbz2``:  tar archive, compressed using bzip2
     :``tgz``:   tar archive, compressed using gzip
+    :``txz``:   tar archive, compressed using lzma (only in Python 3)
     :``uzip``:  zip archive, uncompressed
     :``zip``:   zip archive, compressed using deflate
 
--- a/tests/test-archive.t	Sun Sep 15 22:43:32 2019 +0900
+++ b/tests/test-archive.t	Tue Sep 17 10:47:31 2019 +0000
@@ -566,6 +566,19 @@
   *172*80*00:00*old/.hg_archival.txt (glob)
   *0*80*00:00*old/old (glob)
 
+test xz support only available in Python 3.4
+
+#if py3
+  $ hg archive ../archive.txz
+  $ xz -l ../archive.txz | head -n1
+  Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
+  $ rm -f ../archive.txz
+#else
+  $ hg archive ../archive.txz
+  abort: xz compression is only available in Python 3
+  [255]
+#endif
+
 show an error when a provided pattern matches no files
 
   $ hg archive -I file_that_does_not_exist.foo ../empty.zip