From patchwork Thu Oct 14 20:12:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D11667: copy: recommend `--at-rev .` if target was added in parent commit From: phabricator X-Patchwork-Id: 49991 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Thu, 14 Oct 2021 20:12:45 +0000 martinvonz created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY 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). REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D11667 AFFECTED FILES mercurial/cmdutil.py tests/test-rename-rev.t CHANGE DETAILS To: martinvonz, #hg-reviewers Cc: mercurial-patches, mercurial-devel 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 @@ -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 diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -1678,26 +1678,41 @@ 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' + if abstarget in pctx and any( + abssrc in gpctx and abstarget not in gpctx + for gpctx in pctx.parents() + ): + 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: