Show More
@@ -1212,7 +1212,7 b' class localrepository(object):' | |||||
1212 | ce.refresh() |
|
1212 | ce.refresh() | |
1213 |
|
1213 | |||
1214 | def _lock(self, vfs, lockname, wait, releasefn, acquirefn, desc, |
|
1214 | def _lock(self, vfs, lockname, wait, releasefn, acquirefn, desc, | |
1215 | parentenvvar=None): |
|
1215 | inheritchecker=None, parentenvvar=None): | |
1216 | parentlock = None |
|
1216 | parentlock = None | |
1217 | # the contents of parentenvvar are used by the underlying lock to |
|
1217 | # the contents of parentenvvar are used by the underlying lock to | |
1218 | # determine whether it can be inherited |
|
1218 | # determine whether it can be inherited | |
@@ -1221,6 +1221,7 b' class localrepository(object):' | |||||
1221 | try: |
|
1221 | try: | |
1222 | l = lockmod.lock(vfs, lockname, 0, releasefn=releasefn, |
|
1222 | l = lockmod.lock(vfs, lockname, 0, releasefn=releasefn, | |
1223 | acquirefn=acquirefn, desc=desc, |
|
1223 | acquirefn=acquirefn, desc=desc, | |
|
1224 | inheritchecker=inheritchecker, | |||
1224 | parentlock=parentlock) |
|
1225 | parentlock=parentlock) | |
1225 | except error.LockHeld as inst: |
|
1226 | except error.LockHeld as inst: | |
1226 | if not wait: |
|
1227 | if not wait: | |
@@ -1265,6 +1266,11 b' class localrepository(object):' | |||||
1265 | self._lockref = weakref.ref(l) |
|
1266 | self._lockref = weakref.ref(l) | |
1266 | return l |
|
1267 | return l | |
1267 |
|
1268 | |||
|
1269 | def _wlockchecktransaction(self): | |||
|
1270 | if self.currenttransaction() is not None: | |||
|
1271 | raise error.LockInheritanceContractViolation( | |||
|
1272 | 'wlock cannot be inherited in the middle of a transaction') | |||
|
1273 | ||||
1268 | def wlock(self, wait=True): |
|
1274 | def wlock(self, wait=True): | |
1269 | '''Lock the non-store parts of the repository (everything under |
|
1275 | '''Lock the non-store parts of the repository (everything under | |
1270 | .hg except .hg/store) and return a weak reference to the lock. |
|
1276 | .hg except .hg/store) and return a weak reference to the lock. | |
@@ -1296,7 +1302,9 b' class localrepository(object):' | |||||
1296 |
|
1302 | |||
1297 | l = self._lock(self.vfs, "wlock", wait, unlock, |
|
1303 | l = self._lock(self.vfs, "wlock", wait, unlock, | |
1298 | self.invalidatedirstate, _('working directory of %s') % |
|
1304 | self.invalidatedirstate, _('working directory of %s') % | |
1299 |
self.origroot, |
|
1305 | self.origroot, | |
|
1306 | inheritchecker=self._wlockchecktransaction, | |||
|
1307 | parentenvvar='HG_WLOCK_LOCKER') | |||
1300 | self._wlockref = weakref.ref(l) |
|
1308 | self._wlockref = weakref.ref(l) | |
1301 | return l |
|
1309 | return l | |
1302 |
|
1310 |
@@ -260,7 +260,7 b' class testlock(unittest.TestCase):' | |||||
260 | state.assertacquirecalled(True) |
|
260 | state.assertacquirecalled(True) | |
261 |
|
261 | |||
262 | def tryinherit(): |
|
262 | def tryinherit(): | |
263 |
with lock.inherit() |
|
263 | with lock.inherit(): | |
264 | pass |
|
264 | pass | |
265 |
|
265 | |||
266 | self.assertRaises(error.LockInheritanceContractViolation, tryinherit) |
|
266 | self.assertRaises(error.LockInheritanceContractViolation, tryinherit) |
General Comments 0
You need to be logged in to leave comments.
Login now