dirstate: use `dirstate.change_files` to scope the change in `copy`
This is the way, unless we are not actually touching the working copy.
In such cases we don't need to do something.
--- a/mercurial/commands.py Tue Dec 13 16:29:30 2022 +0100
+++ b/mercurial/commands.py Tue Jan 31 00:08:53 2023 +0100
@@ -2497,7 +2497,19 @@
Returns 0 on success, 1 if errors are encountered.
"""
opts = pycompat.byteskwargs(opts)
- with repo.wlock():
+
+ context = repo.dirstate.changing_files
+ rev = opts.get(b'at_rev')
+ ctx = None
+ if rev:
+ ctx = logcmdutil.revsingle(repo, rev)
+ if ctx.rev() is not None:
+
+ def context(repo):
+ return util.nullcontextmanager()
+
+ opts[b'at_rev'] = ctx.rev()
+ with repo.wlock(), context(repo):
return cmdutil.copy(ui, repo, pats, opts)