discovery: indices between sample and yesno must match (issue4438)
3ef893520a85 changed 'sample' from a list to a set. The iteration order is thus
undefined and the yesno indices are not stable.
To solve this, repeat the listification and comment from elsewhere in the code.
Note: the randomness in the discovery protocol can make this problem hard to
reproduce.
--- a/mercurial/setdiscovery.py Wed Nov 05 13:05:29 2014 +0100
+++ b/mercurial/setdiscovery.py Wed Nov 05 13:05:32 2014 +0100
@@ -134,6 +134,8 @@
roundtrips += 1
ownheads = dag.heads()
sample = _limitsample(ownheads, initialsamplesize)
+ # indices between sample and externalized version must match
+ sample = list(sample)
if remote.local():
# stopgap until we have a proper localpeer that supports batch()
srvheadhashes = remote.heads()