archival: force a `CompressionError` to bytes before passing to `error.Abort`
authorMatt Harbison <matt_harbison@yahoo.com>
Mon, 20 Sep 2021 11:03:46 -0400
changeset 48012 406a7e629946
parent 48011 8655a77dce94
child 48013 376d08ae904f
archival: force a `CompressionError` to bytes before passing to `error.Abort` I'm not sure what changed before pytype 09-09-2021 (from 04-15-2021), but this started getting flagged. This fixes: File "/mnt/c/Users/Matt/hg/mercurial/archival.py", line 199, in taropen: Function bytestr.__init__ was called with the wrong arguments [wrong-arg-types] Expected: (self, ints: Iterable[int]) Actually passed: (self, ints: tarfile.CompressionError) Attributes of protocol Iterable[int] are not implemented on tarfile.CompressionError: __iter__ Differential Revision: https://phab.mercurial-scm.org/D11472
mercurial/archival.py
--- a/mercurial/archival.py	Mon Sep 20 10:59:26 2021 -0400
+++ b/mercurial/archival.py	Mon Sep 20 11:03:46 2021 -0400
@@ -29,6 +29,8 @@
     vfs as vfsmod,
 )
 
+from .utils import stringutil
+
 stringio = util.stringio
 
 # from unzip source code:
@@ -196,7 +198,7 @@
                         name, pycompat.sysstr(mode + kind), fileobj
                     )
                 except tarfile.CompressionError as e:
-                    raise error.Abort(pycompat.bytestr(e))
+                    raise error.Abort(stringutil.forcebytestr(e))
 
         if isinstance(dest, bytes):
             self.z = taropen(b'w:', name=dest)