changeset 32000:511a62669f1b

phases: emit phases to pushkey protocol in deterministic order An upcoming test will report exact bytes sent over the wire protocol. Without this change, the ordering of phases listkey data is non-deterministic.
author Gregory Szorc <gregory.szorc@gmail.com>
date Thu, 13 Apr 2017 22:12:04 -0700
parents aa836f56c3cc
children c85f19c66e8d
files mercurial/phases.py
diffstat 1 files changed, 3 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/phases.py	Thu Apr 13 18:04:38 2017 -0700
+++ b/mercurial/phases.py	Thu Apr 13 22:12:04 2017 -0700
@@ -116,6 +116,7 @@
     error,
     smartset,
     txnutil,
+    util,
 )
 
 allphases = public, draft, secret = range(3)
@@ -386,7 +387,8 @@
 
 def listphases(repo):
     """List phases root for serialization over pushkey"""
-    keys = {}
+    # Use ordered dictionary so behavior is deterministic.
+    keys = util.sortdict()
     value = '%i' % draft
     for root in repo._phasecache.phaseroots[draft]:
         keys[hex(root)] = value