py3: coerce bytestr to bytes to appease urllib.parse.quote_from_bytes()
authorGregory Szorc <gregory.szorc@gmail.com>
Thu, 11 Oct 2018 22:26:12 +0200
changeset 40159 5774fc623a18
parent 40158 9310037f0636
child 40160 6037c49b8964
py3: coerce bytestr to bytes to appease urllib.parse.quote_from_bytes() Differential Revision: https://phab.mercurial-scm.org/D4969
mercurial/urllibcompat.py
--- a/mercurial/urllibcompat.py	Thu Oct 11 21:47:39 2018 +0200
+++ b/mercurial/urllibcompat.py	Thu Oct 11 22:26:12 2018 +0200
@@ -92,6 +92,10 @@
     # (if necessary), and returns str. This is wonky. We provide a custom
     # implementation that only accepts bytes and emits bytes.
     def quote(s, safe=r'/'):
+        # bytestr has an __iter__ that emits characters. quote_from_bytes()
+        # does an iteration and expects ints. We coerce to bytes to appease it.
+        if isinstance(s, pycompat.bytestr):
+            s = bytes(s)
         s = urllib.parse.quote_from_bytes(s, safe=safe)
         return s.encode('ascii', 'strict')