bundle2: add op.gettransaction() to handlers that need the lock
A future patch will allow the bundle2 lock be taken lazily. We need to
introduce transaction-gets to each handler that needs the lock.
The tests caught these issues when I added lazy locking.
--- a/mercurial/bundle2.py Thu Oct 08 17:44:22 2015 -0500
+++ b/mercurial/bundle2.py Tue Oct 06 14:42:29 2015 -0700
@@ -1374,6 +1374,9 @@
heads.append(h)
h = inpart.read(20)
assert not h
+ # Trigger a transaction so that we are guaranteed to have the lock now.
+ if op.ui.configbool('experimental', 'bundle2lazylocking'):
+ op.gettransaction()
if heads != op.repo.heads():
raise error.PushRaced('repository changed while pushing - '
'please try again')
@@ -1442,6 +1445,10 @@
key = dec(inpart.params['key'])
old = dec(inpart.params['old'])
new = dec(inpart.params['new'])
+ # Grab the transaction to ensure that we have the lock before performing the
+ # pushkey.
+ if op.ui.configbool('experimental', 'bundle2lazylocking'):
+ op.gettransaction()
ret = op.repo.pushkey(namespace, key, old, new)
record = {'namespace': namespace,
'key': key,
@@ -1497,6 +1504,9 @@
Payload is pairs of 20 byte changeset nodes and filenodes.
"""
+ # Grab the transaction so we ensure that we have the lock at this point.
+ if op.ui.configbool('experimental', 'bundle2lazylocking'):
+ op.gettransaction()
cache = tags.hgtagsfnodescache(op.repo.unfiltered())
count = 0