Patchwork D7459: lock: pass "success" boolean to _afterlock callbacks

login
register
mail settings
Submitter phabricator
Date Nov. 26, 2019, 2:49 p.m.
Message ID <47a3a8c8c0d63341823f86cb0b9aeeab@localhost.localdomain>
Download mbox | patch
Permalink /patch/43524/
State Not Applicable
Headers show

Comments

phabricator - Nov. 26, 2019, 2:49 p.m.
Closed by commit rHG4b065b019b4e: lock: pass &quot;success&quot; boolean to _afterlock callbacks (authored by spectral).
This revision was automatically updated to reflect the committed changes.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D7459?vs=18248&id=18393

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D7459/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D7459

AFFECTED FILES
  hgext/remotefilelog/__init__.py
  mercurial/bundle2.py
  mercurial/changegroup.py
  mercurial/localrepo.py
  mercurial/lock.py
  mercurial/manifest.py
  tests/test-lock.py

CHANGE DETAILS




To: spectral, #hg-reviewers, pulkit
Cc: mercurial-devel

Patch

diff --git a/tests/test-lock.py b/tests/test-lock.py
--- a/tests/test-lock.py
+++ b/tests/test-lock.py
@@ -65,7 +65,7 @@ 
     def releasefn(self):
         self._releasecalled = True
 
-    def postreleasefn(self):
+    def postreleasefn(self, success):
         self._postreleasecalled = True
 
     def assertacquirecalled(self, called):
diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -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:
diff --git a/mercurial/lock.py b/mercurial/lock.py
--- a/mercurial/lock.py
+++ b/mercurial/lock.py
@@ -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
 
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -2203,7 +2203,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())
@@ -2615,7 +2615,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
@@ -2953,7 +2953,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):
@@ -3399,7 +3399,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,
diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py
--- a/mercurial/changegroup.py
+++ b/mercurial/changegroup.py
@@ -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.
diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -2372,7 +2372,7 @@ 
 
         if pushkeycompat:
 
-            def runhook():
+            def runhook(unused_success):
                 for hookargs in allhooks:
                     op.repo.hook(b'pushkey', **pycompat.strkwargs(hookargs))
 
diff --git a/hgext/remotefilelog/__init__.py b/hgext/remotefilelog/__init__.py
--- a/hgext/remotefilelog/__init__.py
+++ b/hgext/remotefilelog/__init__.py
@@ -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