transaction: turn lack of locking into a hard failure (API)
authorPierre-Yves David <pierre-yves.david@ens-lyon.org>
Thu, 05 May 2016 16:20:53 +0200
changeset 29186 e0fc0ed41935
parent 29185 28e7f590be2d
child 29187 aec5d8561be2
transaction: turn lack of locking into a hard failure (API) We have been warning about transactions without locks for about a year (and three releases), third party extensions had a fair grace period to fix their code, we are moving lack of locking to a hard failure in order to protect users against repository corruption.
mercurial/localrepo.py
tests/test-devel-warnings.t
--- a/mercurial/localrepo.py	Thu May 05 16:13:22 2016 +0200
+++ b/mercurial/localrepo.py	Thu May 05 16:20:53 2016 +0200
@@ -1000,7 +1000,8 @@
                 or self.ui.configbool('devel', 'check-locks')):
             l = self._lockref and self._lockref()
             if l is None or not l.held:
-                self.ui.develwarn('transaction with no lock')
+                raise RuntimeError('programming error: transaction requires '
+                                   'locking')
         tr = self.currenttransaction()
         if tr is not None:
             return tr.nest()
--- a/tests/test-devel-warnings.t	Thu May 05 16:13:22 2016 +0200
+++ b/tests/test-devel-warnings.t	Thu May 05 16:20:53 2016 +0200
@@ -159,7 +159,15 @@
 
 Test programming error failure:
 
-  $ hg buggytransaction
-  devel-warn: transaction with no lock at: $TESTTMP/buggylocking.py:* (buggylocking) (glob)
+  $ hg buggytransaction 2>&1 | egrep -v '^  '
+  ** Unknown exception encountered with possibly-broken third-party extension buggylocking
+  ** which supports versions unknown of Mercurial.
+  ** Please disable buggylocking and try your action again.
+  ** If that fixes the bug please report it to the extension author.
+  ** Python * (glob)
+  ** Mercurial Distributed SCM (*) (glob)
+  ** Extensions loaded: * (glob)
+  Traceback (most recent call last):
+  RuntimeError: programming error: transaction requires locking
 
   $ cd ..