diff -r 6e88cd060ba2 -r a76d5ba7ac43 mercurial/exchange.py --- a/mercurial/exchange.py Wed Aug 24 04:19:11 2016 +0200 +++ b/mercurial/exchange.py Tue Aug 23 23:47:59 2016 +0200 @@ -1201,8 +1201,10 @@ " %s") % (', '.join(sorted(missing))) raise error.Abort(msg) - lock = pullop.repo.lock() + wlock = lock = None try: + wlock = pullop.repo.wlock() + lock = pullop.repo.lock() pullop.trmanager = transactionmanager(repo, 'pull', remote.url()) streamclone.maybeperformlegacystreamclone(pullop) # This should ideally be in _pullbundle2(). However, it needs to run @@ -1217,8 +1219,7 @@ _pullobsolete(pullop) pullop.trmanager.close() finally: - pullop.trmanager.release() - lock.release() + lockmod.release(pullop.trmanager, lock, wlock) return pullop