comparison mercurial/commands.py @ 50060:3c34a224c232

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.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 13 Dec 2022 04:21:27 +0100
parents 7a8bfc05b691
children 16b78c0de506
comparison
equal deleted inserted replaced
50059:f4eef08575ce 50060:3c34a224c232
250 ? foo.c 250 ? foo.c
251 251
252 Returns 0 if all files are successfully added. 252 Returns 0 if all files are successfully added.
253 """ 253 """
254 254
255 m = scmutil.match(repo[None], pats, pycompat.byteskwargs(opts)) 255 with repo.wlock():
256 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True) 256 m = scmutil.match(repo[None], pats, pycompat.byteskwargs(opts))
257 rejected = cmdutil.add(ui, repo, m, b"", uipathfn, False, **opts) 257 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
258 return rejected and 1 or 0 258 rejected = cmdutil.add(ui, repo, m, b"", uipathfn, False, **opts)
259 return rejected and 1 or 0
259 260
260 261
261 @command( 262 @command(
262 b'addremove', 263 b'addremove',
263 similarityopts + subrepoopts + walkopts + dryrunopts, 264 similarityopts + subrepoopts + walkopts + dryrunopts,