# HG changeset patch # User Martin von Zweigbergk # Date 1634234319 25200 # Node ID c62e4397eb289638160cf5d898cc12f6576d15ac # Parent 2f7caef017d90f69c77ac8246ccc7906ab2b663a 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 diff -r 2f7caef017d9 -r c62e4397eb28 mercurial/cmdutil.py --- 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: diff -r 2f7caef017d9 -r c62e4397eb28 tests/test-rename-rev.t --- 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