ui: use bytes IO and convert EOL manually in ui.editor()
Text IO sucks on Python 3 as it must be a unicode stream. We could introduce
a wrapper that converts unicode back to bytes, but it wouldn't be simple to
handle offsets transparently from/to underlying IOBase API.
Fortunately, we don't need to process huge text files, so let's stick to
bytes IO and convert EOL in memory.
--- a/mercurial/ui.py Wed Mar 29 21:40:15 2017 +0900
+++ b/mercurial/ui.py Wed Mar 29 21:43:38 2017 +0900
@@ -1232,11 +1232,11 @@
if self.configbool('experimental', 'editortmpinhg'):
rdir = repopath
(fd, name) = tempfile.mkstemp(prefix='hg-' + extra['prefix'] + '-',
- suffix=extra['suffix'], text=True,
+ suffix=extra['suffix'],
dir=rdir)
try:
- f = os.fdopen(fd, pycompat.sysstr("w"))
- f.write(encoding.strfromlocal(text))
+ f = os.fdopen(fd, r'wb')
+ f.write(util.tonativeeol(text))
f.close()
environ = {'HGUSER': user}
@@ -1258,8 +1258,8 @@
onerr=error.Abort, errprefix=_("edit failed"),
blockedtag='editor')
- f = open(name)
- t = encoding.strtolocal(f.read())
+ f = open(name, r'rb')
+ t = util.fromnativeeol(f.read())
f.close()
finally:
os.unlink(name)