D3841: stringutil: add a new function to do minimal regex escaping
durin42 (Augie Fackler)
phabricator at mercurial-scm.org
Tue Jun 26 13:51:12 EDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG96f65bdf0bf4: stringutil: add a new function to do minimal regex escaping (authored by durin42, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D3841?vs=9308&id=9312
REVISION DETAIL
https://phab.mercurial-scm.org/D3841
AFFECTED FILES
mercurial/utils/stringutil.py
CHANGE DETAILS
diff --git a/mercurial/utils/stringutil.py b/mercurial/utils/stringutil.py
--- a/mercurial/utils/stringutil.py
+++ b/mercurial/utils/stringutil.py
@@ -23,6 +23,25 @@
pycompat,
)
+# regex special chars pulled from https://bugs.python.org/issue29995
+# which was part of Python 3.7.
+_respecial = pycompat.bytestr(b'()[]{}?*+-|^$\\.# \t\n\r\v\f')
+_regexescapemap = {ord(i): (b'\\' + i).decode('latin1') for i in _respecial}
+
+def reescape(pat):
+ """Drop-in replacement for re.escape."""
+ # NOTE: it is intentional that this works on unicodes and not
+ # bytes, as it's only possible to do the escaping with
+ # unicode.translate, not bytes.translate. Sigh.
+ wantuni = True
+ if isinstance(pat, bytes):
+ wantuni = False
+ pat = pat.decode('latin1')
+ pat = pat.translate(_regexescapemap)
+ if wantuni:
+ return pat
+ return pat.encode('latin1')
+
def pprint(o, bprefix=False):
"""Pretty print an object."""
if isinstance(o, bytes):
To: durin42, #hg-reviewers, pulkit
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list