[PATCH 2 of 5] remove: eliminate forget call on workingctx

Adrian Buehlmann adrian at cadifra.com
Mon May 23 14:31:58 CDT 2011


On 2011-05-23 16:56, Adrian Buehlmann wrote:
> # HG changeset patch
> # User Adrian Buehlmann <adrian at cadifra.com>
> # Date 1306147863 -7200
> # Node ID cef67681abdfa654259aa380dfa92d844c73889f
> # Parent  647a8cde6157b77484e7074e295bd84415b57cd5
> remove: eliminate forget call on workingctx
> 
> so we can spare use acquring wlock twice
> 
> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -3915,15 +3915,15 @@
>              ret = 1
>  
>      if force:
> -        remove, forget = modified + deleted + clean, added
> +        remove = modified + deleted + clean + added
>      elif after:
> -        remove, forget = deleted, []
> +        remove = deleted
>          for f in modified + added + clean:
>              ui.warn(_('not removing %s: file still exists (use -f'
>                        ' to force removal)\n') % m.rel(f))
>              ret = 1
>      else:
> -        remove, forget = deleted + clean, []
> +        remove = deleted + clean
>          for f in modified:
>              ui.warn(_('not removing %s: file is modified (use -f'
>                        ' to force removal)\n') % m.rel(f))
> @@ -3933,12 +3933,11 @@
>                        ' to force removal)\n') % m.rel(f))
>              ret = 1
>  
> -    for f in sorted(remove + forget):
> +    for f in sorted(remove):
>          if ui.verbose or not m.exact(f):
>              ui.status(_('removing %s\n') % m.rel(f))
>  
> -    repo[None].forget(forget)
> -    repo[None].remove(remove, unlink=not after)
> +    repo[None].remove(remove, unlink=not after, unlinkadded=False)
>      return ret
>  
>  @command('rename|move|mv',

I don't know how I can describe this better than with the patch itself,
but I think doing a single

    repo[None].remove(remove, unlink=not after, unlinkadded=False)

than calling these two

    repo[None].forget(forget)
    repo[None].remove(remove, unlink=not after)

is better, since both workingctx.forget and workingctx.remove each
acquire and release the wlock.

And it turns out we don't even need forget, if we agree to add this
unlinkadded parameter do remove.

So, after this patch, we acquire the wlock exactly once for 'hg remove'.



More information about the Mercurial-devel mailing list