# HG changeset patch # User Matt Harbison # Date 2018-12-19 19:51:21 # Node ID 87c98ffbc8c74a62fcbf480a857d1e68c436d3dd # Parent e88ced97151db99196c16b3db31a19daf6df5d5d 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. diff --git a/tests/hghave.py b/tests/hghave.py --- a/tests/hghave.py +++ b/tests/hghave.py @@ -16,6 +16,16 @@ checks = { "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 @@ def require(features): 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)