# HG changeset patch # User Martin von Zweigbergk # Date 2020-07-28 16:58:28 # Node ID 5178dd2233d017ea217f7b0b654752fe697a0071 # Parent d71693f799a0d4e0c5cf2639a66e173dacc11470 rename: add support for --at-rev, which marks as copy and removes the source I had previously only added support for `--at-rev` to `hg cp`, but not to `hg mv`. This patch adds that support. Just like for `hg cp`, it marks the destination as copied from the source, and doesn't care if the source file still exists (because it only supports the `-A` mode, aka "don't touch files" mode). It works whether or not the source file still exists. This matches the behavior of `hg mv -A` in the working copy. Differential Revision: https://phab.mercurial-scm.org/D8840 diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -5781,6 +5781,13 @@ def remove(ui, repo, *pats, **opts): [ (b'A', b'after', None, _(b'record a rename that has already occurred')), ( + b'', + b'at-rev', + b'', + _(b'(un)mark renames in the given revision (EXPERIMENTAL)'), + _(b'REV'), + ), + ( b'f', b'force', None, diff --git a/relnotes/next b/relnotes/next --- a/relnotes/next +++ b/relnotes/next @@ -1,5 +1,9 @@ == New Features == + * `hg mv -A` can now be used with `--at-rev`. It behaves just like + `hg cp -A --at-rev`, i.e. it marks the destination as a copy of the + source whether or not the source still exists (but the source must + exist in the parent revision). == New Experimental Features == diff --git a/tests/test-completion.t b/tests/test-completion.t --- a/tests/test-completion.t +++ b/tests/test-completion.t @@ -353,7 +353,7 @@ Show all commands + options push: force, rev, bookmark, branch, new-branch, pushvars, publish, ssh, remotecmd, insecure recover: verify remove: after, force, subrepos, include, exclude, dry-run - rename: after, force, include, exclude, dry-run + rename: after, at-rev, force, include, exclude, dry-run resolve: all, list, mark, unmark, no-status, re-merge, tool, include, exclude, template revert: all, date, rev, no-backup, interactive, include, exclude, dry-run rollback: dry-run, force diff --git a/tests/test-rename-rev.t b/tests/test-rename-rev.t --- a/tests/test-rename-rev.t +++ b/tests/test-rename-rev.t @@ -43,7 +43,7 @@ Test single file A d1/d d1/b -Test moved file (not copied) +Test moved file (not copied) using 'hg cp' command $ hg co 0 0 files updated, 0 files merged, 2 files removed, 0 files unresolved @@ -59,10 +59,40 @@ Test moved file (not copied) d1/b R d1/b +Test moved file (not copied) using 'hg mv' command + + $ hg co 0 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ mv d1/b d1/d + $ hg rm -A d1/b + $ hg add d1/d + $ hg ci -m 'move d1/b to d1/d' + created new head + $ hg mv -A --at-rev . d1/b d1/d + saved backup bundle to $TESTTMP/.hg/strip-backup/519850c3ea27-153c8fbb-copy.hg + $ hg st -C --change . + A d1/d + d1/b + R d1/b + +Test moved file (not copied) for which source still exists + + $ hg co 0 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ cp d1/b d1/d + $ hg add d1/d + $ hg ci -m 'copy d1/b to d1/d' + created new head + $ hg mv -A --at-rev . d1/b d1/d + saved backup bundle to $TESTTMP/.hg/strip-backup/c8d0f6bcf7ca-1c9bb53e-copy.hg + $ hg st -C --change . + A d1/d + d1/b + Test using directory as destination $ hg co 0 - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ cp -R d1 d3 $ hg add d3 adding d3/a