diff -r c8e9a3636abe -r 888bd39ed555 mercurial/lock.py --- 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