On 16/08/2021 01:55, ZheNing Hu via GitGitGadget wrote:
From: ZheNing Hu <adlternative@xxxxxxxxx>
[...]
sequencer.c | 16 +++++++++++++++-
t/t3501-revert-cherry-pick.sh | 20 ++++++++++++++++++++
t/t3507-cherry-pick-conflict.sh | 17 ++++++++++-------
3 files changed, 45 insertions(+), 8 deletions(-)
diff --git a/sequencer.c b/sequencer.c
index 0bec01cf38e..2dd73d24a87 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -403,7 +403,7 @@ static void print_advice(struct repository *r, int show_hint,
char *msg = getenv("GIT_CHERRY_PICK_HELP");
if (msg) {
- fprintf(stderr, "%s\n", msg);
+ advise("%s\n", msg);
/*
* A conflict has occurred but the porcelain
* (typically rebase --interactive) wants to take care
@@ -418,6 +418,20 @@ static void print_advice(struct repository *r, int show_hint,
if (opts->no_commit)
advise(_("after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'"));
+ else if (opts->action == REPLAY_PICK)
+ advise(_("Resolve all conflicts manually, mark them as resolved with\n"
+ "\"git add/rm <conflicted_files>\", then run\n"
+ "\"git cherry-pick --continue\".\n"
+ "You can instead skip this commit: run \"git cherry-pick --skip\".\n"
+ "To abort and get back to the state before \"git cherry-pick\",\n"
+ "run \"git cherry-pick --abort\"."));
+ else if (opts->action == REPLAY_REVERT)
+ advise(_("Resolve all conflicts manually, mark them as resolved with\n"
+ "\"git add/rm <conflicted_files>\", then run\n"
+ "\"git revert --continue\".\n"
+ "You can instead skip this commit: run \"git revert --skip\".\n"
+ "To abort and get back to the state before \"git revert\",\n"
+ "run \"git revert --abort\"."));
Thanks for making the revert advice better as well
else
advise(_("after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'\n"
I think this last else arm should probably be a bug now as anything
other than cherry-pick or revert should be setting GIT_CHERRY_PICK_HELP
else
BUG("unexpected pick action in print_advice()");
diff --git a/t/t3501-revert-cherry-pick.sh b/t/t3501-revert-cherry-pick.sh
index 9d100cd1884..6766aed7282 100755
--- a/t/t3501-revert-cherry-pick.sh
+++ b/t/t3501-revert-cherry-pick.sh
@@ -158,4 +158,24 @@ test_expect_success 'cherry-pick works with dirty renamed file' '
grep -q "^modified$" renamed
'
+test_expect_success 'advice from failed revert' '
+ echo dream >dream &&
+ git add dream &&
+ git commit -m "add dream" &&
A minor comment: you can condense these three lines by using test_commit
(see test-lib-functions.sh for the documentation)
test_commit "add dream" dream dream
+ dream_oid=$(git rev-parse --short HEAD) &&
+ cat <<-EOF >expected &&
+ error: could not revert $dream_oid... add dream
+ hint: Resolve all conflicts manually, mark them as resolved with
+ hint: "git add/rm <conflicted_files>", then run
+ hint: "git revert --continue".
+ hint: You can instead skip this commit: run "git revert --skip".
+ hint: To abort and get back to the state before "git revert",
+ hint: run "git revert --abort".
+ EOF
+ echo dream >>dream &&
+ git add dream &&
+ git commit -m "double-add dream" &&
test_commit can also append to a file
test_commit --append "double-add dream" dream dream
This is looking very close to being ready now I think
Thanks
Phillip
+ test_must_fail git revert HEAD^ 2>actual &&
+ test_cmp expected actual
+'
test_done
diff --git a/t/t3507-cherry-pick-conflict.sh b/t/t3507-cherry-pick-conflict.sh
index 014001b8f32..cb2ebea9ad3 100755
--- a/t/t3507-cherry-pick-conflict.sh
+++ b/t/t3507-cherry-pick-conflict.sh
@@ -47,20 +47,23 @@ test_expect_success 'failed cherry-pick does not advance HEAD' '
test "$head" = "$newhead"
'
-test_expect_success 'advice from failed cherry-pick' "
+test_expect_success 'advice from failed cherry-pick' '
pristine_detach initial &&
- picked=\$(git rev-parse --short picked) &&
+ picked=$(git rev-parse --short picked) &&
cat <<-EOF >expected &&
- error: could not apply \$picked... picked
- hint: after resolving the conflicts, mark the corrected paths
- hint: with 'git add <paths>' or 'git rm <paths>'
- hint: and commit the result with 'git commit'
+ error: could not apply $picked... picked
+ hint: Resolve all conflicts manually, mark them as resolved with
+ hint: "git add/rm <conflicted_files>", then run
+ hint: "git cherry-pick --continue".
+ hint: You can instead skip this commit: run "git cherry-pick --skip".
+ hint: To abort and get back to the state before "git cherry-pick",
+ hint: run "git cherry-pick --abort".
EOF
test_must_fail git cherry-pick picked 2>actual &&
test_cmp expected actual
-"
+'
test_expect_success 'advice from failed cherry-pick --no-commit' "
pristine_detach initial &&
base-commit: daab8a564f8bbac55f70f8bf86c070e001a9b006