[PATCH 3 of 3] lock: allow to configure when the lock messages are displayed

Yuya Nishihara yuya at tcha.org
Wed Nov 29 08:57:34 EST 2017


On Mon, 27 Nov 2017 18:18:11 -0500, Boris Feld wrote:
> # HG changeset patch
> # User Boris Feld <boris.feld at octobus.net>
> # Date 1511801811 18000
> #      Mon Nov 27 11:56:51 2017 -0500
> # Node ID 15b8fcffac40607710816a75217219b5668baba5
> # Parent  f40e9671a53992359c622dd9c46050b4ff09c374
> # EXP-Topic lock-message
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 15b8fcffac40
> lock: allow to configure when the lock messages are displayed

> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -1609,16 +1609,38 @@ class localrepository(object):
>                  msg = _("waiting for lock on %s held by %r\n") % (desc, locker)
>              printer(msg)
>  
> +        delaywarning = self.ui.configint("ui", "timeout.warn")
> +        dowarn = True
> +        if delaywarning < 0:
> +            dowarn = False
> +            delaywarning = 0
> +        else:
> +            delaywarning = delaywarning if wait else 0
>          try:
> -            l = trylock(0)
> +            try:
> +                l = trylock(0)
> +            except error.LockHeld as inst:
> +                if not wait:
> +                    raise
> +                printwarning(self.ui.debug, inst.locker)
> +                if not delaywarning:
> +                    raise
> +                l = trylock(delaywarning)
> +                # We got the lock while warning were silent, inform debug output
> +                msg = _("got lock after %s seconds\n") % (l.delay)
> +                self.ui.debug(msg)
>          except error.LockHeld as inst:
>              if not wait:
>                  raise
> -            printwarning(self.ui.warn, inst.locker)
> +            if dowarn:
> +                printwarning(self.ui.warn, inst.locker)
>              # default to 600 seconds timeout
>              l = trylock(int(self.ui.config("ui", "timeout")))
> -            msg = _("got lock after %s seconds\n") % l.delay
> -            self.ui.warn(msg)
> +            msg = _("got lock after %s seconds\n") % (l.delay + delaywarning)
> +            if dowarn:
> +                self.ui.warn(msg)
> +            else:
> +                self.ui.debug(msg)

Looks okay, but seems unnecessarily complicated. I think it's better to factor
out the lock.lock() loop to a utility function which takes ui and timeouts.

  def lock(ui, ...):
      l = lockmod.lock(..., dolock=False)
      while True:
          try:
              l._trylock()
          except LockHeld:
              if delay >= timeout.warn:
                  ui.warn(...)
              sleep(1)
          ...

Thoughts?


More information about the Mercurial-devel mailing list