check-py3-compat: manually format and print warnings
authorGregory Szorc <gregory.szorc@gmail.com>
Mon, 04 Feb 2019 14:38:23 -0800
changeset 41569 ba7eaff26474
parent 41568 01417ca7f2e2
child 41570 9f69ddb807f7
check-py3-compat: manually format and print warnings The warnings mechanism may print to stderr on Python 3. Independent buffering of stdout and stderr can lead to warnings output not being printed properly. This commit traps warnings when executing individual files and prints warnings to stdout so output is deterministic. Differential Revision: https://phab.mercurial-scm.org/D5845
contrib/check-py3-compat.py
--- a/contrib/check-py3-compat.py	Mon Feb 04 14:25:00 2019 -0800
+++ b/contrib/check-py3-compat.py	Mon Feb 04 14:38:23 2019 -0800
@@ -14,6 +14,7 @@
 import os
 import sys
 import traceback
+import warnings
 
 def check_compat_py2(f):
     """Check Python 3 compatibility for a file with Python 2"""
@@ -91,6 +92,11 @@
         fn = check_compat_py3
 
     for f in sys.argv[1:]:
-        fn(f)
+        with warnings.catch_warnings(record=True) as warns:
+            fn(f)
+
+        for w in warns:
+            print(warnings.formatwarning(w.message, w.category,
+                                         w.filename, w.lineno).rstrip())
 
     sys.exit(0)