@@ -65,7 +65,7 @@
def releasefn(self):
self._releasecalled = True
- def postreleasefn(self):
+ def postreleasefn(self, success):
self._postreleasecalled = True
def assertacquirecalled(self, called):
@@ -1572,7 +1572,11 @@
reporef = weakref.ref(repo)
manifestrevlogref = weakref.ref(self)
- def persistmanifestcache():
+ def persistmanifestcache(success):
+ # Repo is in an unknown state, do not persist.
+ if not success:
+ return
+
repo = reporef()
self = manifestrevlogref()
if repo is None or self is None:
@@ -233,7 +233,8 @@
return self
def __exit__(self, exc_type, exc_value, exc_tb):
- self.release()
+ success = all(a is None for a in (exc_type, exc_value, exc_tb))
+ self.release(success=success)
def __del__(self):
if self.held:
@@ -408,7 +409,7 @@
self.acquirefn()
self._inherited = False
- def release(self):
+ def release(self, success=True):
"""release the lock and execute callback function if any
If the lock has been acquired multiple times, the actual release is
@@ -433,7 +434,7 @@
# at all.
if not self._parentheld:
for callback in self.postrelease:
- callback()
+ callback(success)
# Prevent double usage and help clear cycles.
self.postrelease = None
@@ -2180,7 +2180,7 @@
# fixes the function accumulation.
hookargs = tr2.hookargs
- def hookfunc():
+ def hookfunc(unused_success):
repo = reporef()
if hook.hashook(repo.ui, b'txnclose-bookmark'):
bmchanges = sorted(tr.changes[b'bookmarks'].items())
@@ -2592,7 +2592,7 @@
l.postrelease.append(callback)
break
else: # no lock have been found.
- callback()
+ callback(True)
def lock(self, wait=True):
'''Lock the repository store (.hg/store) and return a weak reference
@@ -2931,7 +2931,7 @@
)
raise
- def commithook():
+ def commithook(unused_success):
# hack for command that use a temporary commit (eg: histedit)
# temporary commit got stripped before hook release
if self.changelog.hasnode(ret):
@@ -3377,7 +3377,7 @@
self.ui.debug(b'pushing key for "%s:%s"\n' % (namespace, key))
ret = pushkey.push(self, namespace, key, old, new)
- def runhook():
+ def runhook(unused_success):
self.hook(
b'pushkey',
namespace=namespace,
@@ -436,7 +436,7 @@
if changesets > 0:
- def runhooks():
+ def runhooks(unused_success):
# These hooks run when the lock releases, not when the
# transaction closes. So it's possible for the changelog
# to have changed since we last saw it.
@@ -2372,7 +2372,7 @@
if pushkeycompat:
- def runhook():
+ def runhook(unused_success):
for hookargs in allhooks:
op.repo.hook(b'pushkey', **pycompat.strkwargs(hookargs))
@@ -1063,7 +1063,7 @@
# update a revset with a date limit
bgprefetchrevs = revdatelimit(ui, bgprefetchrevs)
- def anon():
+ def anon(unused_success):
if util.safehasattr(repo, b'ranprefetch') and repo.ranprefetch:
return
repo.ranprefetch = True