( )⚙ D6103 py3: use pycompat.iterbytestr to convert memoryview slice to bytestring before passing to itertools.takewhile

This is an archive of the discontinued Mercurial Phabricator instance.

py3: use pycompat.iterbytestr to convert memoryview slice to bytestring before passing to itertools.takewhile
ClosedPublic

Authored by Kwan on Mar 8 2019, 10:00 PM.

Details

Summary

otherwise ch is the int value of the byte in py3 rather than the actual
character

Diff Detail

Repository
rHG Mercurial
Lint
Lint Skipped
Unit
Unit Tests Skipped

Event Timeline

Kwan created this revision.Mar 8 2019, 10:00 PM
yuja added a subscriber: yuja.Mar 9 2019, 8:29 PM

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.

Kwan retitled this revision from py3: use pycompat.iterbytestr to convert itertools.takewhile result back to bytes to py3: use pycompat.iterbytestr to convert memoryview slice to bytestring before passing to itertools.takewhile.Mar 14 2019, 11:40 AM
Kwan edited the summary of this revision. (Show Details)
Kwan updated this revision to Diff 14494.
Kwan added a comment.Mar 14 2019, 11:41 AM
In 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!

This revision was automatically updated to reflect the committed changes.