util: prefer "bytesio" to "stringio"
authorGregory Szorc <gregory.szorc@gmail.com>
Wed, 14 Mar 2018 11:52:35 -0700
changeset 36958 644a02f6b34f
parent 36957 a8d540d2628c
child 36959 43815d87c6aa
util: prefer "bytesio" to "stringio" The io.BytesIO and io.StringIO types enforce the type of data being operated on. On Python 2, we use cStringIO.StringIO(), which is lax about mixing types. On Python 3, we actually use io.BytesIO. Ideally, we'd use io.BytesIO on Python 2. But I believe its performance is poor compared to cString.StringIO(). Anyway, we canonically define our pycompat type as "stringio." That name is misleading, especially on Python 3. This commit renames the canonical symbols to "bytesio." "stringio" is preserved as an alias for API compatibility. There are a lot of callers in the repo and I hesitate to take away the old name. I also don't feel like changing everything at this time. But at least new callers can use a "proper" name. Differential Revision: https://phab.mercurial-scm.org/D2868
mercurial/pure/mpatch.py
mercurial/pure/parsers.py
mercurial/pycompat.py
mercurial/util.py
--- a/mercurial/pure/mpatch.py	Wed Mar 14 14:05:45 2018 -0400
+++ b/mercurial/pure/mpatch.py	Wed Mar 14 11:52:35 2018 -0700
@@ -10,7 +10,7 @@
 import struct
 
 from .. import pycompat
-stringio = pycompat.stringio
+stringio = pycompat.bytesio
 
 class mpatchError(Exception):
     """error raised when a delta cannot be decoded
--- a/mercurial/pure/parsers.py	Wed Mar 14 14:05:45 2018 -0400
+++ b/mercurial/pure/parsers.py	Wed Mar 14 11:52:35 2018 -0700
@@ -12,7 +12,7 @@
 
 from ..node import nullid
 from .. import pycompat
-stringio = pycompat.stringio
+stringio = pycompat.bytesio
 
 
 _pack = struct.pack
--- a/mercurial/pycompat.py	Wed Mar 14 14:05:45 2018 -0400
+++ b/mercurial/pycompat.py	Wed Mar 14 11:52:35 2018 -0700
@@ -64,7 +64,9 @@
     sysexecutable = sys.executable
     if sysexecutable:
         sysexecutable = os.fsencode(sysexecutable)
-    stringio = io.BytesIO
+    bytesio = io.BytesIO
+    # TODO deprecate stringio name, as it is a lie on Python 3.
+    stringio = bytesio
 
     def maplist(*args):
         return list(map(*args))
@@ -343,7 +345,8 @@
     getcwd = os.getcwd
     sysexecutable = sys.executable
     shlexsplit = shlex.split
-    stringio = cStringIO.StringIO
+    bytesio = cStringIO.StringIO
+    stringio = bytesio
     maplist = map
     ziplist = zip
     rawinput = raw_input
--- a/mercurial/util.py	Wed Mar 14 14:05:45 2018 -0400
+++ b/mercurial/util.py	Wed Mar 14 11:52:35 2018 -0700
@@ -71,7 +71,9 @@
 stderr = pycompat.stderr
 stdin = pycompat.stdin
 stdout = pycompat.stdout
-stringio = pycompat.stringio
+bytesio = pycompat.bytesio
+# TODO deprecate stringio name, as it is a lie on Python 3.
+stringio = bytesio
 xmlrpclib = pycompat.xmlrpclib
 
 httpserver = urllibcompat.httpserver