mercurial/lock.py
changeset 43798 888bd39ed555
parent 43749 039fbd14d4e2
child 45527 9b16bb3b2349
--- a/mercurial/lock.py	Fri Nov 22 11:08:59 2019 -0800
+++ b/mercurial/lock.py	Tue Nov 19 18:38:17 2019 -0800
@@ -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