Mercurial > hg
changeset 50005:16b78c0de506
locking: take the `wlock` for the full `hg remove` duration
Otherwise, there is a race condition window between the time we resolve the
file to remove with the matcher and the time we lock the repo and modify the
dirstate.
For example, the working copy might have been updated away, or purged, and the
matched files would no longer be correct.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 13 Dec 2022 04:22:46 +0100 |
parents | 3c34a224c232 |
children | feaa5d08bb19 |
files | mercurial/commands.py |
diffstat | 1 files changed, 7 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Tue Dec 13 04:21:27 2022 +0100 +++ b/mercurial/commands.py Tue Dec 13 04:22:46 2022 +0100 @@ -5945,12 +5945,13 @@ if not pats and not after: raise error.InputError(_(b'no files specified')) - m = scmutil.match(repo[None], pats, opts) - subrepos = opts.get(b'subrepos') - uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True) - return cmdutil.remove( - ui, repo, m, b"", uipathfn, after, force, subrepos, dryrun=dryrun - ) + with repo.wlock(): + m = scmutil.match(repo[None], pats, opts) + subrepos = opts.get(b'subrepos') + uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True) + return cmdutil.remove( + ui, repo, m, b"", uipathfn, after, force, subrepos, dryrun=dryrun + ) @command(