Mercurial > hg-stable
comparison mercurial/localrepo.py @ 35218:1b758105b5c7
lock: add a trylock method handling the timeout and messaging logic
We are about to make the messages around lock more flexible. We move all the
currently logic into a function in the lock module. We'll update the message
scheme in the next changeset.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Wed, 29 Nov 2017 20:36:29 -0500 |
parents | d210723b73e5 |
children | 9153871d50e0 |
comparison
equal
deleted
inserted
replaced
35217:d210723b73e5 | 35218:1b758105b5c7 |
---|---|
1590 parentlock = None | 1590 parentlock = None |
1591 # the contents of parentenvvar are used by the underlying lock to | 1591 # the contents of parentenvvar are used by the underlying lock to |
1592 # determine whether it can be inherited | 1592 # determine whether it can be inherited |
1593 if parentenvvar is not None: | 1593 if parentenvvar is not None: |
1594 parentlock = encoding.environ.get(parentenvvar) | 1594 parentlock = encoding.environ.get(parentenvvar) |
1595 try: | 1595 |
1596 l = lockmod.lock(vfs, lockname, 0, releasefn=releasefn, | 1596 timeout = 0 |
1597 acquirefn=acquirefn, desc=desc, | 1597 if wait: |
1598 inheritchecker=inheritchecker, | 1598 timeout = self.ui.configint("ui", "timeout") |
1599 parentlock=parentlock) | 1599 |
1600 except error.LockHeld as inst: | 1600 l = lockmod.trylock(self.ui, vfs, lockname, timeout, |
1601 if not wait: | 1601 releasefn=releasefn, |
1602 raise | 1602 acquirefn=acquirefn, desc=desc, |
1603 # show more details for new-style locks | 1603 inheritchecker=inheritchecker, |
1604 if ':' in inst.locker: | 1604 parentlock=parentlock) |
1605 host, pid = inst.locker.split(":", 1) | |
1606 self.ui.warn( | |
1607 _("waiting for lock on %s held by process %r " | |
1608 "on host %r\n") % (desc, pid, host)) | |
1609 else: | |
1610 self.ui.warn(_("waiting for lock on %s held by %r\n") % | |
1611 (desc, inst.locker)) | |
1612 # default to 600 seconds timeout | |
1613 l = lockmod.lock(vfs, lockname, | |
1614 self.ui.configint("ui", "timeout"), | |
1615 releasefn=releasefn, acquirefn=acquirefn, | |
1616 desc=desc) | |
1617 self.ui.warn(_("got lock after %s seconds\n") % l.delay) | |
1618 return l | 1605 return l |
1619 | 1606 |
1620 def _afterlock(self, callback): | 1607 def _afterlock(self, callback): |
1621 """add a callback to be run when the repository is fully unlocked | 1608 """add a callback to be run when the repository is fully unlocked |
1622 | 1609 |