Patchwork D6103: py3: use pycompat.iterbytestr to convert itertools.takewhile result back to bytes

login
register
mail settings
Submitter phabricator
Date March 9, 2019, 3 a.m.
Message ID <differential-rev-PHID-DREV-qrpwrrkm7vqddufilagy-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/39156/
State Superseded
Headers show

Comments

phabricator - March 9, 2019, 3 a.m.
Kwan created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  itertools.takewhile on a bytestring returns the bytes as ints in py3, use
  iterbytestr to get the individual characters as bytestring like in py2.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6103

AFFECTED FILES
  hgext/phabricator.py

CHANGE DETAILS




To: Kwan, #hg-reviewers
Cc: mercurial-devel
Yuya Nishihara - March 10, 2019, 1:23 a.m.
Queued most of the patches in this series, thanks.

> -        symbol = b''.join(itertools.takewhile(lambda ch: ch not in special,
> -                                              view[pos:]))
> +        symbol = b''.join(pycompat.iterbytestr(itertools.takewhile(
> +            lambda ch: ch not in special,
> +            view[pos:]

It's probably better to apply `iterbytestr()` to `view[pos:]` so `ch` is
always a byte string.
phabricator - March 10, 2019, 1:29 a.m.
yuja added a comment.


  Queued most of the patches in this series, thanks.
  
  > - symbol = b''.join(itertools.takewhile(lambda ch: ch not in special,
  > - view[pos:])) +        symbol = b''.join(pycompat.iterbytestr(itertools.takewhile( +            lambda ch: ch not in special, +            view[pos:]
  
  It's probably better to apply `iterbytestr()` to `view[pos:]` so `ch` is
  always a byte string.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6103

To: Kwan, #hg-reviewers
Cc: yuja, mercurial-devel
phabricator - March 14, 2019, 3:41 p.m.
Kwan added a comment.


  In https://phab.mercurial-scm.org/D6103#88988, @yuja wrote:
  
  > Queued most of the patches in this series, thanks.
  >
  > >   -        symbol = b''.join(itertools.takewhile(lambda ch: ch not in special,
  > >   -                                              view[pos:]))
  > >   +        symbol = b''.join(pycompat.iterbytestr(itertools.takewhile(
  > >   +            lambda ch: ch not in special,
  > >   +            view[pos:]
  >
  > It's probably better to apply `iterbytestr()` to `view[pos:]` so `ch` is
  >  always a byte string.
  
  
  Thanks, done!

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6103

To: Kwan, #hg-reviewers
Cc: yuja, mercurial-devel

Patch

diff --git a/hgext/phabricator.py b/hgext/phabricator.py
--- a/hgext/phabricator.py
+++ b/hgext/phabricator.py
@@ -671,8 +671,10 @@ 
     pos = 0
     length = len(text)
     while pos < length:
-        symbol = b''.join(itertools.takewhile(lambda ch: ch not in special,
-                                              view[pos:]))
+        symbol = b''.join(pycompat.iterbytestr(itertools.takewhile(
+            lambda ch: ch not in special,
+            view[pos:]
+        )))
         if symbol:
             yield (b'symbol', symbol, pos)
             pos += len(symbol)