# HG changeset patch # User Pierre-Yves David # Date 1670901687 -3600 # Node ID 3c34a224c2321f21d2ac5d0873368fe2a8c3561d # Parent f4eef08575ce12aa011f00154012c0c2d3012b9b locking: take the `wlock` for the full `hg add` duration Otherwise, there is a race condition window between the time we resolve the file to add 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. diff -r f4eef08575ce -r 3c34a224c232 mercurial/commands.py --- a/mercurial/commands.py Mon Feb 06 01:22:01 2023 +0100 +++ b/mercurial/commands.py Tue Dec 13 04:21:27 2022 +0100 @@ -252,10 +252,11 @@ Returns 0 if all files are successfully added. """ - m = scmutil.match(repo[None], pats, pycompat.byteskwargs(opts)) - uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True) - rejected = cmdutil.add(ui, repo, m, b"", uipathfn, False, **opts) - return rejected and 1 or 0 + with repo.wlock(): + m = scmutil.match(repo[None], pats, pycompat.byteskwargs(opts)) + uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True) + rejected = cmdutil.add(ui, repo, m, b"", uipathfn, False, **opts) + return rejected and 1 or 0 @command(