Mercurial > hg
changeset 45048:2c0043977b6d stable
archival: abort if compression method is unavailable
`tarfile.CompressionError` is documented to be the "exception for unavailable
compression methods".
Also, make tests conditional on whether the lzma module is available or not.
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Wed, 08 Jul 2020 08:57:21 +0200 |
parents | 40120de810ba |
children | 3a6ec080b521 e699cebc3ae9 |
files | mercurial/archival.py tests/hghave.py tests/test-archive.t |
diffstat | 3 files changed, 25 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/archival.py Wed Jul 08 08:25:30 2020 +0200 +++ b/mercurial/archival.py Wed Jul 08 08:57:21 2020 +0200 @@ -189,7 +189,12 @@ name, pycompat.sysstr(mode), gzfileobj ) else: - return tarfile.open(name, pycompat.sysstr(mode + kind), fileobj) + try: + return tarfile.open( + name, pycompat.sysstr(mode + kind), fileobj + ) + except tarfile.CompressionError as e: + raise error.Abort(pycompat.bytestr(e)) if isinstance(dest, bytes): self.z = taropen(b'w:', name=dest)
--- a/tests/hghave.py Wed Jul 08 08:25:30 2020 +0200 +++ b/tests/hghave.py Wed Jul 08 08:57:21 2020 +0200 @@ -1074,3 +1074,14 @@ return matchoutput( '`rustup which --toolchain nightly rustfmt` --version', b'rustfmt' ) + + +@check("lzma", "python lzma module") +def has_lzma(): + try: + import _lzma + + _lzma.FORMAT_XZ + return True + except ImportError: + return False
--- a/tests/test-archive.t Wed Jul 08 08:25:30 2020 +0200 +++ b/tests/test-archive.t Wed Jul 08 08:57:21 2020 +0200 @@ -576,12 +576,18 @@ test xz support only available in Python 3.4 -#if py3 +#if lzma $ hg archive ../archive.txz $ which xz >/dev/null && xz -l ../archive.txz | head -n1 || true Strms Blocks Compressed Uncompressed Ratio Check Filename (xz !) $ rm -f ../archive.txz -#else +#endif +#if py3 no-lzma + $ hg archive ../archive.txz + abort: lzma module is not available + [255] +#endif +#if no-py3 $ hg archive ../archive.txz abort: xz compression is only available in Python 3 [255]