py3: use bytes stdout in hghave.py
This fixes a failure in test-run-tests.t around notarealhghavefeature. It seems
crazy to me that all of this needs to be adjusted in all of these tests, but the
line as run-tests.py sees it in _processoutput() before doing anything is
already mangled with a trailing '\r'. Switching to normalizenewlines=True for
TTest works, but I'm sure that breaks other stuff.
--- a/tests/hghave.py Wed Dec 19 02:57:48 2018 +0100
+++ b/tests/hghave.py Wed Dec 19 14:51:21 2018 -0500
@@ -16,6 +16,16 @@
"false": (lambda: False, "nail clipper"),
}
+try:
+ import msvcrt
+ msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
+ msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
+except ImportError:
+ pass
+
+stdout = getattr(sys.stdout, 'buffer', sys.stdout)
+stderr = getattr(sys.stderr, 'buffer', sys.stderr)
+
if sys.version_info[0] >= 3:
def _bytespath(p):
if p is None:
@@ -90,11 +100,12 @@
result = checkfeatures(features)
for missing in result['missing']:
- sys.stderr.write('skipped: unknown feature: %s\n' % missing)
+ stderr.write(('skipped: unknown feature: %s\n'
+ % missing).encode('utf-8'))
for msg in result['skipped']:
- sys.stderr.write('skipped: %s\n' % msg)
+ stderr.write(('skipped: %s\n' % msg).encode('utf-8'))
for msg in result['error']:
- sys.stderr.write('%s\n' % msg)
+ stderr.write(('%s\n' % msg).encode('utf-8'))
if result['missing']:
sys.exit(2)