py3: use bytes stdout in hghave.py
authorMatt Harbison <matt_harbison@yahoo.com>
Wed, 19 Dec 2018 14:51:21 -0500
changeset 41003 87c98ffbc8c7
parent 41002 e88ced97151d
child 41004 e10641c48fa7
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.
tests/hghave.py
--- 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)