changeset 50035:e356e8b65d70

dirstate: use `dirstate.change_files` to scope the change in `rename` This is the way, unless we are not actually touching the working copy. In such cases we don't need to do something.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 31 Jan 2023 00:05:12 +0100
parents 5c9462adc4b9
children bb6eaa65d12a
files mercurial/commands.py
diffstat 1 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Tue Jan 31 00:08:53 2023 +0100
+++ b/mercurial/commands.py	Tue Jan 31 00:05:12 2023 +0100
@@ -6014,7 +6014,18 @@
     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, rename=True)