# HG changeset patch # User Gregory Szorc # Date 1549299270 28800 # Node ID bd3f03d8cc9fe098868e01f7ed727dbf095907bc # Parent 14983ac4a76428d593dd016ddd51ba9ccd4b31d6 global: use raw strings for regular expressions with escapes Escape sequences like \w, \s, and \d are technically invalid in str/bytes. This became a deprecation warning in Python 3.6 (https://bugs.python.org/issue27364). Python 3.8 bumps it to a SyntaxWarning (https://bugs.python.org/issue32912), which is non-silent by default. This commit changes a number of regular expressions to use br'' so regular expression special sequences don't need \\ literals. This fixes roughly half of the SyntaxWarning we see in the code base with Python 3.8. Differential Revision: https://phab.mercurial-scm.org/D5815 diff -r 14983ac4a764 -r bd3f03d8cc9f hgext/blackbox.py --- a/hgext/blackbox.py Mon Feb 04 09:29:25 2019 -0800 +++ b/hgext/blackbox.py Mon Feb 04 08:54:30 2019 -0800 @@ -190,7 +190,7 @@ break # count the commands by matching lines like: 2013/01/23 19:13:36 root> - if re.match('^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} .*> .*', line): + if re.match(br'^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} .*> .*', line): count += 1 output.append(line) diff -r 14983ac4a764 -r bd3f03d8cc9f hgext/commitextras.py --- a/hgext/commitextras.py Mon Feb 04 09:29:25 2019 -0800 +++ b/hgext/commitextras.py Mon Feb 04 08:54:30 2019 -0800 @@ -58,7 +58,7 @@ if not k: msg = _("unable to parse '%s', keys can't be empty") raise error.Abort(msg % raw) - if re.search('[^\w-]', k): + if re.search(br'[^\w-]', k): msg = _("keys can only contain ascii letters, digits," " '_' and '-'") raise error.Abort(msg) diff -r 14983ac4a764 -r bd3f03d8cc9f hgext/convert/cvsps.py --- a/hgext/convert/cvsps.py Mon Feb 04 09:29:25 2019 -0800 +++ b/hgext/convert/cvsps.py Mon Feb 04 08:54:30 2019 -0800 @@ -122,7 +122,7 @@ re_31 = re.compile(b'----------------------------$') re_32 = re.compile(b'=======================================' b'======================================$') - re_50 = re.compile(b'revision ([\\d.]+)(\s+locked by:\s+.+;)?$') + re_50 = re.compile(br'revision ([\d.]+)(\s+locked by:\s+.+;)?$') re_60 = re.compile(br'date:\s+(.+);\s+author:\s+(.+);\s+state:\s+(.+?);' br'(\s+lines:\s+(\+\d+)?\s+(-\d+)?;)?' br'(\s+commitid:\s+([^;]+);)?' diff -r 14983ac4a764 -r bd3f03d8cc9f hgext/mq.py --- a/hgext/mq.py Mon Feb 04 09:29:25 2019 -0800 +++ b/hgext/mq.py Mon Feb 04 08:54:30 2019 -0800 @@ -1181,7 +1181,7 @@ def makepatchname(self, title, fallbackname): """Return a suitable filename for title, adding a suffix to make it unique in the existing list""" - namebase = re.sub('[\s\W_]+', '_', title.lower()).strip('_') + namebase = re.sub(br'[\s\W_]+', b'_', title.lower()).strip(b'_') namebase = namebase[:75] # avoid too long name (issue5117) if namebase: try: diff -r 14983ac4a764 -r bd3f03d8cc9f hgext/phabricator.py --- a/hgext/phabricator.py Mon Feb 04 09:29:25 2019 -0800 +++ b/hgext/phabricator.py Mon Feb 04 08:54:30 2019 -0800 @@ -255,9 +255,9 @@ repo.ui.setconfig(b'phabricator', b'repophid', repophid) return repophid -_differentialrevisiontagre = re.compile(b'\AD([1-9][0-9]*)\Z') +_differentialrevisiontagre = re.compile(br'\AD([1-9][0-9]*)\Z') _differentialrevisiondescre = re.compile( - b'^Differential Revision:\s*(?P(?:.*)D(?P[1-9][0-9]*))$', re.M) + br'^Differential Revision:\s*(?P(?:.*)D(?P[1-9][0-9]*))$', re.M) def getoldnodedrevmap(repo, nodelist): """find previous nodes that has been sent to Phabricator diff -r 14983ac4a764 -r bd3f03d8cc9f hgext/releasenotes.py --- a/hgext/releasenotes.py Mon Feb 04 09:29:25 2019 -0800 +++ b/hgext/releasenotes.py Mon Feb 04 08:54:30 2019 -0800 @@ -55,7 +55,7 @@ ('api', _('API Changes')), ] -RE_DIRECTIVE = re.compile('^\.\. ([a-zA-Z0-9_]+)::\s*([^$]+)?$') +RE_DIRECTIVE = re.compile(br'^\.\. ([a-zA-Z0-9_]+)::\s*([^$]+)?$') RE_ISSUE = br'\bissue ?[0-9]{4,6}(?![0-9])\b' BULLET_SECTION = _('Other Changes') diff -r 14983ac4a764 -r bd3f03d8cc9f mercurial/color.py --- a/mercurial/color.py Mon Feb 04 09:29:25 2019 -0800 +++ b/mercurial/color.py Mon Feb 04 08:54:30 2019 -0800 @@ -484,7 +484,7 @@ w32effects = None else: origattr = csbi.wAttributes - ansire = re.compile(b'\033\[([^m]*)m([^\033]*)(.*)', + ansire = re.compile(br'\033\[([^m]*)m([^\033]*)(.*)', re.MULTILINE | re.DOTALL) def win32print(ui, writefunc, text, **opts): diff -r 14983ac4a764 -r bd3f03d8cc9f mercurial/patch.py --- a/mercurial/patch.py Mon Feb 04 09:29:25 2019 -0800 +++ b/mercurial/patch.py Mon Feb 04 08:54:30 2019 -0800 @@ -638,8 +638,8 @@ return self.changed | self.removed # @@ -start,len +start,len @@ or @@ -start +start @@ if len is 1 -unidesc = re.compile('@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@') -contextdesc = re.compile('(?:---|\*\*\*) (\d+)(?:,(\d+))? (?:---|\*\*\*)') +unidesc = re.compile(br'@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@') +contextdesc = re.compile(br'(?:---|\*\*\*) (\d+)(?:,(\d+))? (?:---|\*\*\*)') eolmodes = ['strict', 'crlf', 'lf', 'auto'] class patchfile(object): @@ -2762,7 +2762,7 @@ return maxfile, maxtotal, addtotal, removetotal, binary def diffstatdata(lines): - diffre = re.compile('^diff .*-r [a-z0-9]+\s(.*)$') + diffre = re.compile(br'^diff .*-r [a-z0-9]+\s(.*)$') results = [] filename, adds, removes, isbinary = None, 0, 0, False