[PATCH 1 of 3] run-tests: use pickle to send results from children to parent

Siddharth Agarwal sid0 at fb.com
Fri Nov 9 17:17:13 CST 2012


# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1352500956 28800
# Node ID f333cd9952248730977f8129a3ef34e7a26898e7
# Parent  6ac7ad13790a6ac3f93bf7fb3efa576006e046a2
run-tests: use pickle to send results from children to parent

JSON would probably be preferable, but it isn't available for Python 2.4 or 2.5.

diff -r 6ac7ad13790a -r f333cd995224 tests/run-tests.py
--- a/tests/run-tests.py	Thu Nov 08 14:10:04 2012 -0800
+++ b/tests/run-tests.py	Fri Nov 09 14:42:36 2012 -0800
@@ -55,6 +55,7 @@
 import re
 import threading
 import killdaemons as killmod
+import cPickle as pickle
 
 processlock = threading.Lock()
 
@@ -1060,25 +1061,23 @@
         os.close(wfd)
     signal.signal(signal.SIGINT, signal.SIG_IGN)
     failures = 0
-    tested, skipped, failed = 0, 0, 0
+    passed, skipped, failed = 0, 0, 0
     skips = []
     fails = []
     while fps:
         pid, status = os.wait()
         fp = fps.pop(pid)
-        l = fp.read().splitlines()
         try:
-            test, skip, fail = map(int, l[:3])
-        except ValueError:
-            test, skip, fail = 0, 0, 0
-        split = -fail or len(l)
-        for s in l[3:split]:
-            skips.append(s.split(" ", 1))
-        for s in l[split:]:
-            fails.append(s.split(" ", 1))
-        tested += test
-        skipped += skip
-        failed += fail
+            childresults = pickle.load(fp)
+        except pickle.UnpicklingError:
+            pass
+        else:
+            passed += len(childresults['p'])
+            skipped += len(childresults['s'])
+            failed += len(childresults['f'])
+            skips.extend(childresults['s'])
+            fails.extend(childresults['f'])
+
         vlog('pid %d exited, status %d' % (pid, status))
         failures |= status
     print
@@ -1093,7 +1092,7 @@
 
     _checkhglib("Tested")
     print "# Ran %d tests, %d skipped, %d failed." % (
-        tested, skipped, failed)
+        passed + failed, skipped, failed)
 
     if options.anycoverage:
         outputcoverage(options)
@@ -1138,11 +1137,7 @@
 
         if options.child:
             fp = os.fdopen(options.child, 'w')
-            fp.write('%d\n%d\n%d\n' % (tested, skipped, failed))
-            for s in results['s']:
-                fp.write("%s %s\n" % s)
-            for s in results['f']:
-                fp.write("%s %s\n" % s)
+            pickle.dump(results, fp, pickle.HIGHEST_PROTOCOL)
             fp.close()
         else:
             print


More information about the Mercurial-devel mailing list