url: add cgi.escape equivalent for bytestrings
authorAugie Fackler <augie@google.com>
Sat, 14 Oct 2017 02:57:26 -0400
changeset 34694 2976cf87a60a
parent 34693 56bb07a0b75c
child 34695 e178fcaa3933
url: add cgi.escape equivalent for bytestrings This seems like a sensible enough place to put it. Differential Revision: https://phab.mercurial-scm.org/D1066
mercurial/url.py
--- a/mercurial/url.py	Thu Oct 05 14:15:05 2017 -0400
+++ b/mercurial/url.py	Sat Oct 14 02:57:26 2017 -0400
@@ -30,6 +30,21 @@
 urlerr = util.urlerr
 urlreq = util.urlreq
 
+def escape(s, quote=None):
+    '''Replace special characters "&", "<" and ">" to HTML-safe sequences.
+    If the optional flag quote is true, the quotation mark character (")
+    is also translated.
+
+    This is the same as cgi.escape in Python, but always operates on
+    bytes, whereas cgi.escape in Python 3 only works on unicodes.
+    '''
+    s = s.replace(b"&", b"&amp;")
+    s = s.replace(b"<", b"&lt;")
+    s = s.replace(b">", b"&gt;")
+    if quote:
+        s = s.replace(b'"', b"&quot;")
+    return s
+
 class passwordmgr(object):
     def __init__(self, ui, passwddb):
         self.ui = ui