[PATCH STABLE] py3: avoid iterating over a literal bytes in highlight

Denis Laxalde denis at laxalde.org
Tue Nov 12 10:21:51 UTC 2019


# HG changeset patch
# User Denis Laxalde <denis.laxalde at logilab.fr>
# Date 1573553103 -3600
#      Tue Nov 12 11:05:03 2019 +0100
# Branch stable
# Node ID 430d80ba9271920ca6da8db62b507390f65d20d1
# Parent  e513e87b0476cc9a6eb31abe420448877fa9c902
py3: avoid iterating over a literal bytes in highlight

In Python 3, iterating over a bytes literal yields integers. Since we
use the value in `text.replace()`, this fails on Python 3 with the
following trackback:

    Traceback (most recent call last):
      File "/usr/lib/python3/dist-packages/mercurial/hgweb/hgwebdir_mod.py", line 378, in run_wsgi
        for r in self._runwsgi(req, res):
      File "/usr/lib/python3/dist-packages/mercurial/hgweb/hgweb_mod.py", line 326, in run_wsgi
        for r in self._runwsgi(req, res, repo):
      File "/usr/lib/python3/dist-packages/mercurial/hgweb/hgweb_mod.py", line 449, in _runwsgi
        return getattr(webcommands, cmd)(rctx)
      File "/usr/lib/python3/dist-packages/mercurial/hgweb/webcommands.py", line 211, in file
        return _filerevision(web, webutil.filectx(web.repo, web.req))
      File "/usr/lib/python3/dist-packages/hgext/highlight/__init__.py", line 72, in filerevision_highlight
        pygmentize(web, b'fileline', fctx, web.tmpl)
      File "/usr/lib/python3/dist-packages/hgext/highlight/__init__.py", line 58, in pygmentize
        field, fctx, style, tmpl, guessfilenameonly=filenameonly
      File "/usr/lib/python3/dist-packages/hgext/highlight/highlight.py", line 62, in pygmentize
        text = text.replace(c, b'')
    TypeError: a bytes-like object is required, not 'int'

diff --git a/hgext/highlight/highlight.py b/hgext/highlight/highlight.py
--- a/hgext/highlight/highlight.py
+++ b/hgext/highlight/highlight.py
@@ -57,7 +57,7 @@ def pygmentize(field, fctx, style, tmpl,
         return
 
     # str.splitlines() != unicode.splitlines() because "reasons"
-    for c in b"\x0c\x1c\x1d\x1e":
+    for c in b"\x0c", b"\x1c", b"\x1d", b"\x1e":
         if c in text:
             text = text.replace(c, b'')
 


More information about the Mercurial-devel mailing list