Mercurial > hg
changeset 48247:c62e4397eb28
copy: recommend `--at-rev .` if target was added in parent commit
If the target file was added in the working copy parent, it's much
more likely that the user meant to use `--at-rev .` (to record the
copy/rename in the that commit) than `--force` (to replace the
just-added file by another file).
Differential Revision: https://phab.mercurial-scm.org/D11667
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 14 Oct 2021 10:58:39 -0700 |
parents | 2f7caef017d9 |
children | 7f23a472068f |
files | mercurial/cmdutil.py tests/test-rename-rev.t |
diffstat | 2 files changed, 46 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/cmdutil.py Mon Oct 18 10:14:44 2021 +0200 +++ b/mercurial/cmdutil.py Thu Oct 14 10:58:39 2021 -0700 @@ -1678,26 +1678,44 @@ if not opts[b'force']: if already_commited: msg = _(b'%s: not overwriting - file already committed\n') - if after: - flags = b'--after --force' - else: - flags = b'--force' - if rename: - hint = ( - _( - b"('hg rename %s' to replace the file by " - b'recording a rename)\n' + # Check if if the target was added in the parent and the + # source already existed in the grandparent. + looks_like_copy_in_pctx = abstarget in pctx and any( + abssrc in gpctx and abstarget not in gpctx + for gpctx in pctx.parents() + ) + if looks_like_copy_in_pctx: + if rename: + hint = _( + b"('hg rename --at-rev .' to record the rename " + b"in the parent of the working copy)\n" + ) + else: + hint = _( + b"('hg copy --at-rev .' to record the copy in " + b"the parent of the working copy)\n" ) - % flags - ) else: - hint = ( - _( - b"('hg copy %s' to replace the file by " - b'recording a copy)\n' + if after: + flags = b'--after --force' + else: + flags = b'--force' + if rename: + hint = ( + _( + b"('hg rename %s' to replace the file by " + b'recording a rename)\n' + ) + % flags ) - % flags - ) + else: + hint = ( + _( + b"('hg copy %s' to replace the file by " + b'recording a copy)\n' + ) + % flags + ) else: msg = _(b'%s: not overwriting - file exists\n') if rename:
--- a/tests/test-rename-rev.t Mon Oct 18 10:14:44 2021 +0200 +++ b/tests/test-rename-rev.t Thu Oct 14 10:58:39 2021 -0700 @@ -42,6 +42,17 @@ d1/b A d1/d d1/b +# Should get helpful message if we try to copy or rename after commit + $ hg cp --forget --at-rev . d1/d + saved backup bundle to $TESTTMP/.hg/strip-backup/3f7c325d3f9e-46f377bb-uncopy.hg + $ hg cp d1/b d1/d + d1/d: not overwriting - file already committed + ('hg copy --at-rev .' to record the copy in the parent of the working copy) + [1] + $ hg mv d1/b d1/d + d1/d: not overwriting - file already committed + ('hg rename --at-rev .' to record the rename in the parent of the working copy) + [1] Test moved file (not copied) using 'hg cp' command