cvsps: add two more tiebreakers in cscmp
authorAugie Fackler <raf@durin42.com>
Thu, 21 Aug 2014 10:07:30 -0400
changeset 22267 90cf454edd70
parent 22266 711de9dcb1d3
child 22268 ca2e9cf77033
cvsps: add two more tiebreakers in cscmp test-convert-cvs.t has been a little flaky for a while now. Add an extra tiebreaker in cscmp so that all the cases in the test will sort reliably. Without this patch, test-convert-cvs.t failed after 346 runs. With this patch, I stopped trying to get it to fail after 615 runs. While not conclusive, that makes me pretty optimistic that this is a working fix.
hgext/convert/cvsps.py
--- a/hgext/convert/cvsps.py	Sat Aug 16 17:59:26 2014 +0900
+++ b/hgext/convert/cvsps.py	Thu Aug 21 10:07:30 2014 -0400
@@ -631,7 +631,19 @@
                     odd.add((l, r))
                 d = -1
                 break
+        # By this point, the changesets are sufficiently compared that
+        # we don't really care about ordering. However, this leaves
+        # some race conditions in the tests, so we compare on the
+        # number of files modified and the number of branchpoints in
+        # each changeset to ensure test output remains stable.
 
+        # recommended replacement for cmp from
+        # https://docs.python.org/3.0/whatsnew/3.0.html
+        c = lambda x, y: (x > y) - (x < y)
+        if not d:
+            d = c(len(l.entries), len(r.entries))
+        if not d:
+            d = c(len(l.branchpoints), len(r.branchpoints))
         return d
 
     changesets.sort(cscmp)