From: "Philippe Blain via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Elijah Newren <newren@gmail.com>,
Phillip Wood <phillip.wood@dunelm.org.uk>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
ZheNing Hu <adlternative@gmail.com>,
Philippe Blain <levraiphilippeblain@gmail.com>
Subject: [PATCH v2 0/2] Allow disabling advice shown after merge conflicts
Date: Sun, 10 Mar 2024 19:50:59 +0000 [thread overview]
Message-ID: <pull.1682.v2.git.1710100261.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1682.git.1709396291693.gitgitgadget@gmail.com>
This series introduces a new config 'advice.mergeConflict' and uses it to
allow disabling the advice shown when 'git rebase', 'git cherry-pick', 'git
revert', 'git rebase --apply' and 'git am' stop because of conflicts.
Changes since v1:
* renamed the new advice to 'advice.mergeConflict' to make it non-sequencer
specific
* added 2/2 which uses the advice in builtin/am, which covers 'git rebase
--apply' and 'git am'
Note that the code path where 'git rebase --apply' stops because of
conflicts is not covered by the tests but I tested it manually using this
diff:
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index 47534f1062..34eac2e6f4 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -374,7 +374,7 @@ test_pull_autostash_fail ()
echo conflicting >>seq.txt &&
test_tick &&
git commit -m "Create conflict" seq.txt &&
- test_must_fail git pull --rebase . seq 2>err >out &&
+ test_must_fail git -c rebase.backend=apply pull --rebase . seq 2>err >out &&
test_grep "Resolve all conflicts manually" err
'
Philippe Blain (2):
sequencer: allow disabling conflict advice
builtin/am: allow disabling conflict advice
Documentation/config/advice.txt | 2 ++
advice.c | 1 +
advice.h | 1 +
builtin/am.c | 14 +++++++++-----
sequencer.c | 33 ++++++++++++++++++---------------
t/t3501-revert-cherry-pick.sh | 1 +
t/t3507-cherry-pick-conflict.sh | 2 ++
t/t4150-am.sh | 8 ++++----
t/t4254-am-corrupt.sh | 2 +-
9 files changed, 39 insertions(+), 25 deletions(-)
base-commit: 0f9d4d28b7e6021b7e6db192b7bf47bd3a0d0d1d
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1682%2Fphil-blain%2Fsequencer-conflict-advice-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1682/phil-blain/sequencer-conflict-advice-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1682
Range-diff vs v1:
1: e929d3381cf ! 1: a2ce6fd24c2 sequencer: allow disabling conflict advice
@@ Commit message
sequencer: allow disabling conflict advice
Allow disabling the advice shown when a squencer operation results in a
- merge conflict through a new config 'advice.sequencerConflict'.
+ merge conflict through a new config 'advice.mergeConflict', which is
+ named generically such that it can be used by other commands eventually.
+
+ Note that we use 'advise_if_enabled' for each message in the second hunk
+ in sequencer.c, instead of using 'if (show_hints &&
+ advice_enabled(...)', because the former instructs the user how to
+ disable the advice, which is more user-friendly.
Update the tests accordingly. Note that the body of the second test in
t3507-cherry-pick-conflict.sh is enclosed in double quotes, so we must
@@ Commit message
## Documentation/config/advice.txt ##
@@ Documentation/config/advice.txt: advice.*::
- rmHints::
- In case of failure in the output of linkgit:git-rm[1],
- show directions on how to proceed from the current state.
-+ sequencerConflict::
-+ Advice shown when a sequencer operation stops because
-+ of conflicts.
- sequencerInUse::
- Advice shown when a sequencer command is already in progress.
- skippedCherryPicks::
+ Advice on how to set your identity configuration when
+ your information is guessed from the system username and
+ domain name.
++ mergeConflict::
++ Advice shown when various commands stop because of conflicts.
+ nestedTag::
+ Advice shown if a user attempts to recursively tag a tag object.
+ pushAlreadyExists::
## advice.c ##
@@ advice.c: static struct {
- [ADVICE_RESET_NO_REFRESH_WARNING] = { "resetNoRefresh" },
- [ADVICE_RESOLVE_CONFLICT] = { "resolveConflict" },
- [ADVICE_RM_HINTS] = { "rmHints" },
-+ [ADVICE_SEQUENCER_CONFLICT] = { "sequencerConflict" },
- [ADVICE_SEQUENCER_IN_USE] = { "sequencerInUse" },
- [ADVICE_SET_UPSTREAM_FAILURE] = { "setUpstreamFailure" },
- [ADVICE_SKIPPED_CHERRY_PICKS] = { "skippedCherryPicks" },
+ [ADVICE_GRAFT_FILE_DEPRECATED] = { "graftFileDeprecated" },
+ [ADVICE_IGNORED_HOOK] = { "ignoredHook" },
+ [ADVICE_IMPLICIT_IDENTITY] = { "implicitIdentity" },
++ [ADVICE_MERGE_CONFLICT] = { "mergeConflict" },
+ [ADVICE_NESTED_TAG] = { "nestedTag" },
+ [ADVICE_OBJECT_NAME_WARNING] = { "objectNameWarning" },
+ [ADVICE_PUSH_ALREADY_EXISTS] = { "pushAlreadyExists" },
## advice.h ##
@@ advice.h: enum advice_type {
- ADVICE_RESOLVE_CONFLICT,
- ADVICE_RM_HINTS,
- ADVICE_SEQUENCER_IN_USE,
-+ ADVICE_SEQUENCER_CONFLICT,
- ADVICE_SET_UPSTREAM_FAILURE,
- ADVICE_SKIPPED_CHERRY_PICKS,
- ADVICE_STATUS_AHEAD_BEHIND_WARNING,
+ ADVICE_IGNORED_HOOK,
+ ADVICE_IMPLICIT_IDENTITY,
+ ADVICE_NESTED_TAG,
++ ADVICE_MERGE_CONFLICT,
+ ADVICE_OBJECT_NAME_WARNING,
+ ADVICE_PUSH_ALREADY_EXISTS,
+ ADVICE_PUSH_FETCH_FIRST,
## sequencer.c ##
@@ sequencer.c: static void print_advice(struct repository *r, int show_hint,
@@ sequencer.c: static void print_advice(struct repository *r, int show_hint,
if (msg) {
- advise("%s\n", msg);
-+ advise_if_enabled(ADVICE_SEQUENCER_CONFLICT, "%s\n", msg);
++ advise_if_enabled(ADVICE_MERGE_CONFLICT, "%s\n", msg);
/*
* A conflict has occurred but the porcelain
* (typically rebase --interactive) wants to take care
@@ sequencer.c: 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>'"));
-+ advise_if_enabled(ADVICE_SEQUENCER_CONFLICT,
++ advise_if_enabled(ADVICE_MERGE_CONFLICT,
+ _("after resolving the conflicts, mark the corrected paths\n"
+ "with 'git add <paths>' or 'git rm <paths>'"));
else if (opts->action == REPLAY_PICK)
@@ sequencer.c: static void print_advice(struct repository *r, int show_hint,
- "You can instead skip this commit with \"git cherry-pick --skip\".\n"
- "To abort and get back to the state before \"git cherry-pick\",\n"
- "run \"git cherry-pick --abort\"."));
-+ advise_if_enabled(ADVICE_SEQUENCER_CONFLICT,
++ advise_if_enabled(ADVICE_MERGE_CONFLICT,
+ _("After resolving the conflicts, mark them with\n"
+ "\"git add/rm <pathspec>\", then run\n"
+ "\"git cherry-pick --continue\".\n"
@@ sequencer.c: static void print_advice(struct repository *r, int show_hint,
- "You can instead skip this commit with \"git revert --skip\".\n"
- "To abort and get back to the state before \"git revert\",\n"
- "run \"git revert --abort\"."));
-+ advise_if_enabled(ADVICE_SEQUENCER_CONFLICT,
++ advise_if_enabled(ADVICE_MERGE_CONFLICT,
+ _("After resolving the conflicts, mark them with\n"
+ "\"git add/rm <pathspec>\", then run\n"
+ "\"git revert --continue\".\n"
@@ t/t3501-revert-cherry-pick.sh: test_expect_success 'advice from failed revert' '
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
-+ hint: Disable this message with "git config advice.sequencerConflict false"
++ hint: Disable this message with "git config advice.mergeConflict false"
EOF
test_commit --append --no-tag "double-add dream" dream dream &&
test_must_fail git revert HEAD^ 2>actual &&
@@ t/t3507-cherry-pick-conflict.sh: test_expect_success 'advice from failed cherry-
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
-+ hint: Disable this message with "git config advice.sequencerConflict false"
++ hint: Disable this message with "git config advice.mergeConflict false"
EOF
test_must_fail git cherry-pick picked 2>actual &&
@@ t/t3507-cherry-pick-conflict.sh: test_expect_success 'advice from failed cherry-
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: Disable this message with \"git config advice.sequencerConflict false\"
++ hint: Disable this message with \"git config advice.mergeConflict false\"
EOF
test_must_fail git cherry-pick --no-commit picked 2>actual &&
-: ----------- > 2: 3235542cc6f builtin/am: allow disabling conflict advice
--
gitgitgadget
next prev parent reply other threads:[~2024-03-10 19:51 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-02 16:18 [PATCH] sequencer: allow disabling conflict advice Philippe Blain via GitGitGadget
2024-03-02 16:32 ` Philippe Blain
2024-03-03 22:57 ` Junio C Hamano
2024-03-09 17:22 ` Philippe Blain
2024-03-09 18:58 ` Philippe Blain
2024-03-09 19:55 ` Junio C Hamano
2024-03-09 23:19 ` Junio C Hamano
2024-03-04 10:12 ` Phillip Wood
2024-03-04 10:27 ` Phillip Wood
2024-03-04 17:56 ` Junio C Hamano
2024-03-09 17:53 ` Philippe Blain
2024-03-09 19:15 ` Phillip Wood
2024-03-09 19:56 ` Junio C Hamano
2024-03-09 18:01 ` Philippe Blain
2024-03-10 19:50 ` Philippe Blain via GitGitGadget [this message]
2024-03-10 19:51 ` [PATCH v2 1/2] " Philippe Blain via GitGitGadget
2024-03-11 10:29 ` Kristoffer Haugsbakk
2024-03-16 19:33 ` Philippe Blain
2024-03-10 19:51 ` [PATCH v2 2/2] builtin/am: " Philippe Blain via GitGitGadget
2024-03-11 10:54 ` phillip.wood123
2024-03-11 17:12 ` Junio C Hamano
2024-03-11 17:49 ` Junio C Hamano
2024-03-16 19:44 ` Philippe Blain
2024-03-16 20:01 ` Philippe Blain
2024-03-11 20:58 ` [PATCH v2 0/2] Allow disabling advice shown after merge conflicts Rubén Justo
2024-03-16 20:33 ` Philippe Blain
2024-03-16 21:16 ` [PATCH v3 " Philippe Blain via GitGitGadget
2024-03-16 21:16 ` [PATCH v3 1/2] sequencer: allow disabling conflict advice Philippe Blain via GitGitGadget
2024-03-16 21:16 ` [PATCH v3 2/2] builtin/am: " Philippe Blain via GitGitGadget
2024-03-18 16:31 ` [PATCH v3 0/2] Allow disabling advice shown after merge conflicts Junio C Hamano
2024-03-25 10:48 ` Phillip Wood
2024-03-25 16:57 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.1682.v2.git.1710100261.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=adlternative@gmail.com \
--cc=git@vger.kernel.org \
--cc=levraiphilippeblain@gmail.com \
--cc=newren@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.