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.
--- 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 ..