mercurial/bundle2.py
changeset 21060 0bea9db7543b
parent 21024 7731a2281cf0
child 21062 e7c0a65a5c9c
--- a/mercurial/bundle2.py	Sun Apr 13 16:36:51 2014 -0400
+++ b/mercurial/bundle2.py	Fri Apr 11 06:43:01 2014 -0700
@@ -657,3 +657,17 @@
     ret = int(p['return'])
     op.records.add('changegroup', {'return': ret}, int(p['in-reply-to']))
 
+@parthandler('check:heads')
+def handlechangegroup(op, inpart):
+    """check that head of the repo did not change
+
+    This is used to detect a push race when using unbundle.
+    This replaces the "heads" argument of unbundle."""
+    h = inpart.read(20)
+    heads = []
+    while len(h) == 20:
+        heads.append(h)
+        h = inpart.read(20)
+    assert not h
+    if heads != op.repo.heads():
+        raise exchange.PushRaced()