From: Alex Henrie <alexhenrie24@gmail.com>
To: git@vger.kernel.org, tao@klerks.biz, gitster@pobox.com,
newren@gmail.com, phillip.wood123@gmail.com,
Johannes.Schindelin@gmx.de
Cc: Alex Henrie <alexhenrie24@gmail.com>
Subject: [PATCH v2 4/4] rebase: add a config option for --rebase-merges
Date: Mon, 20 Feb 2023 22:58:05 -0700 [thread overview]
Message-ID: <20230221055805.210951-4-alexhenrie24@gmail.com> (raw)
In-Reply-To: <20230221055805.210951-1-alexhenrie24@gmail.com>
The purpose of the new option is to accommodate users who would like
--rebase-merges to be on by default and to facilitate possibly turning
on --rebase-merges by default without configuration in a future version
of Git.
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
Documentation/config/rebase.txt | 3 ++
Documentation/git-rebase.txt | 3 +-
builtin/rebase.c | 11 +++++
t/t3430-rebase-merges.sh | 81 +++++++++++++++++++++++++++++++++
4 files changed, 97 insertions(+), 1 deletion(-)
diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
index f19bd0e040..d956ec4441 100644
--- a/Documentation/config/rebase.txt
+++ b/Documentation/config/rebase.txt
@@ -67,3 +67,6 @@ rebase.rescheduleFailedExec::
rebase.forkPoint::
If set to false set `--no-fork-point` option by default.
+
+rebase.merges::
+ Default value of `--rebase-merges` option.
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index c98784a0d2..b02f9cbb8c 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -537,7 +537,8 @@ See also INCOMPATIBLE OPTIONS below.
by recreating the merge commits. Any resolved merge conflicts or
manual amendments in these merge commits will have to be
resolved/re-applied manually. `--no-rebase-merges` can be used to
- countermand a previous `--rebase-merges`.
+ countermand both the `rebase.merges` config option and a previous
+ `--rebase-merges`.
+
By default, or when `no-rebase-cousins` was specified, commits which do not
have `<upstream>` as direct ancestor will keep their original branch point,
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 0a8366f30f..35f3837f43 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -829,6 +829,17 @@ static int rebase_config(const char *var, const char *value, void *data)
return 0;
}
+ if (!strcmp(var, "rebase.merges")) {
+ const char *rebase_merges;
+ if (!git_config_string(&rebase_merges, var, value) &&
+ rebase_merges && *rebase_merges) {
+ opts->rebase_merges = git_parse_maybe_bool(rebase_merges);
+ if (opts->rebase_merges < 0)
+ parse_merges_value(opts, rebase_merges);
+ }
+ return 0;
+ }
+
if (!strcmp(var, "rebase.backend")) {
return git_config_string(&opts->default_backend, var, value);
}
diff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh
index b8ba323dbc..4a7193d501 100755
--- a/t/t3430-rebase-merges.sh
+++ b/t/t3430-rebase-merges.sh
@@ -299,6 +299,86 @@ test_expect_success '--rebase-merges="" is invalid syntax' '
test_cmp expect actual
'
+test_expect_success 'rebase.merges="" is equivalent to not passing --rebase-merges' '
+ git config rebase.merges "" &&
+ git checkout -b config-merges-blank E &&
+ git rebase C &&
+ test_cmp_graph C.. <<-\EOF
+ * B
+ * D
+ o C
+ EOF
+'
+
+test_expect_success 'rebase.merges=rebase-cousins is equivalent to --rebase-merges=rebase-cousins' '
+ git config rebase.merges rebase-cousins &&
+ git checkout -b config-rebase-cousins main &&
+ git rebase HEAD^ &&
+ test_cmp_graph HEAD^.. <<-\EOF
+ * Merge the topic branch '\''onebranch'\''
+ |\
+ | * D
+ | * G
+ |/
+ o H
+ EOF
+'
+
+test_expect_success '--no-rebase-merges overrides rebase.merges=no-rebase-cousins' '
+ git config rebase.merges no-rebase-cousins &&
+ git checkout -b override-config-no-rebase-cousins E &&
+ git rebase --no-rebase-merges C &&
+ test_cmp_graph C.. <<-\EOF
+ * B
+ * D
+ o C
+ EOF
+'
+
+test_expect_success '--rebase-merges=no-rebase-cousins overrides rebase.merges=rebase-cousins' '
+ git config rebase.merges rebase-cousins &&
+ git checkout -b override-config-rebase-cousins main &&
+ git rebase --rebase-merges=no-rebase-cousins HEAD^ &&
+ test_cmp_graph HEAD^.. <<-\EOF
+ * Merge the topic branch '\''onebranch'\''
+ |\
+ | * D
+ | * G
+ o | H
+ |/
+ o A
+ EOF
+'
+
+test_expect_success '--rebase-merges overrides rebase.merges=false' '
+ git config rebase.merges false &&
+ git checkout -b override-config-merges-false main &&
+ git rebase --rebase-merges HEAD^ &&
+ test_cmp_graph HEAD^.. <<-\EOF
+ * Merge the topic branch '\''onebranch'\''
+ |\
+ | * D
+ | * G
+ o | H
+ |/
+ o A
+ EOF
+'
+
+test_expect_success '--rebase-merges does not override rebase.merges=rebase-cousins' '
+ git config rebase.merges rebase-cousins &&
+ git checkout -b no-override-config-rebase-cousins main &&
+ git rebase --rebase-merges HEAD^ &&
+ test_cmp_graph HEAD^.. <<-\EOF
+ * Merge the topic branch '\''onebranch'\''
+ |\
+ | * D
+ | * G
+ |/
+ o H
+ EOF
+'
+
test_expect_success 'refs/rewritten/* is worktree-local' '
git worktree add wt &&
cat >wt/script-from-scratch <<-\EOF &&
@@ -409,6 +489,7 @@ test_expect_success 'a "merge" into a root commit is a fast-forward' '
'
test_expect_success 'A root commit can be a cousin, treat it that way' '
+ git config --unset rebase.merges &&
git checkout --orphan khnum &&
test_commit yama &&
git checkout -b asherah main &&
--
2.39.2
next prev parent reply other threads:[~2023-02-21 6:01 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-21 5:58 [PATCH v2 1/4] rebase: document the --no-rebase-merges option Alex Henrie
2023-02-21 5:58 ` [PATCH v2 2/4] rebase: add tests for --no-rebase-merges Alex Henrie
2023-02-21 11:00 ` Phillip Wood
2023-02-22 1:37 ` Alex Henrie
2023-02-22 10:16 ` Phillip Wood
2023-02-23 5:35 ` Alex Henrie
2023-02-21 5:58 ` [PATCH v2 3/4] rebase: stop accepting --rebase-merges="" Alex Henrie
2023-02-21 10:55 ` Phillip Wood
2023-02-22 1:38 ` Alex Henrie
2023-02-22 1:41 ` Alex Henrie
2023-02-22 10:18 ` Phillip Wood
2023-02-22 23:08 ` Junio C Hamano
2023-02-22 23:33 ` Alex Henrie
2023-02-21 5:58 ` Alex Henrie [this message]
2023-02-21 10:46 ` [PATCH v2 4/4] rebase: add a config option for --rebase-merges Phillip Wood
2023-02-22 1:41 ` Alex Henrie
2023-02-21 11:01 ` [PATCH v2 1/4] rebase: document the --no-rebase-merges option Phillip Wood
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=20230221055805.210951-4-alexhenrie24@gmail.com \
--to=alexhenrie24@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=phillip.wood123@gmail.com \
--cc=tao@klerks.biz \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).