[PATCH 2 of 2 v2] evolve: lock the working copy early in next and prev (issue5244)

Pierre-Yves David pierre-yves.david at ens-lyon.org
Sun Oct 16 14:50:29 UTC 2016



On 10/16/2016 04:25 PM, Simon Farnsworth wrote:
> # HG changeset patch
> # User Simon Farnsworth <simonfar at fb.com>
> # Date 1476627823 25200
> #      Sun Oct 16 07:23:43 2016 -0700
> # Node ID 99c560f7d07d3d08b83f5f1802fc329d67e5de2e
> # Parent  ee284d7c5faa5d9f17853f51c17883844b985c58
> evolve: lock the working copy early in next and prev (issue5244)
>
> Both next and prev depend on a consistent working copy, but were waiting to
> take the lock until they were ready to alter the working copy.
>
> Take the lock before reading the working copy state, and do not release it
> until we're definitely not going to change the working copy.
>
> diff --git a/hgext/evolve.py b/hgext/evolve.py
> --- a/hgext/evolve.py
> +++ b/hgext/evolve.py
> @@ -2213,10 +2213,13 @@
>      """update to parent revision
>
>      Displays the summary line of the destination for clarity."""
> -    if True:
> +    wlock = None
> +    dryrunopt = opts['dry_run']
> +    if not dryrunopt:
> +        wlock = repo.wlock()
> +    try:
>          wkctx = repo[None]
>          wparents = wkctx.parents()
> -        dryrunopt = opts['dry_run']
>          if len(wparents) != 1:
>              raise error.Abort('merge in progress')
>          if not opts['merge']:
> @@ -2246,7 +2249,6 @@
>                  ret = hg.update(repo, p.rev())
>                  if not ret:
>                      tr = lock = None
> -                    wlock = repo.wlock()
>                      try:
>                          lock = repo.lock()
>                          tr = repo.transaction('previous')
> @@ -2258,6 +2260,8 @@
>                          tr.close()
>                      finally:
>                          lockmod.release(tr, lock, wlock)
> +                        wlock = None
> +

Given that we dropped  the lock grabbing associated with this 
try:/except: why don't we simply from that release too ? (and the 
associated try:/except

(same apply for the other command)

-- 
Pierre-Yves David



More information about the Mercurial-devel mailing list