fix issue with fast-forward rebases when rebase.abbreviateCommands is set
Quoting from the upstream patch: Jan Alexander Steffens reported that when `rebase.abbreviateCommands' is set, the merge backend fails to fast forward. This is because the backend generates a todo list with only a `noop', and since this command has no abbreviated form, it is replaced by a comment mark. The sequencer then interprets it as if there is nothing to do, and fails. References: https://github.com/git/git/commit/68e7090f31 https://lore.kernel.org/git/9b4bc756764d87c9f34c11e6ec2fc6482f531805.camel@gmail.com/
This commit is contained in:
parent
e8ddd85759
commit
c2ee27a40e
@ -0,0 +1,58 @@
|
||||
From 68e7090f31b4d4f2c7b9a25240af61149fbebb5c Mon Sep 17 00:00:00 2001
|
||||
From: Alban Gruin <alban.gruin@gmail.com>
|
||||
Date: Mon, 30 Mar 2020 14:42:35 +0200
|
||||
Subject: [PATCH 1/2] sequencer: don't abbreviate a command if it doesn't have
|
||||
a short form
|
||||
|
||||
When the sequencer is requested to abbreviate commands, it will replace
|
||||
those that do not have a short form (eg. `noop') by a comment mark.
|
||||
`noop' serves no purpose, except when fast-forwarding (ie. by running
|
||||
`git rebase'). Removing it will break this command when
|
||||
`rebase.abbreviateCommands' is set to true.
|
||||
|
||||
Teach todo_list_to_strbuf() to check if a command has an actual
|
||||
short form, and to ignore it if not.
|
||||
|
||||
Signed-off-by: Alban Gruin <alban.gruin@gmail.com>
|
||||
Signed-off-by: Junio C Hamano <gitster@pobox.com>
|
||||
---
|
||||
sequencer.c | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/sequencer.c b/sequencer.c
|
||||
index e528225e78..c2f97f94ba 100644
|
||||
--- a/sequencer.c
|
||||
+++ b/sequencer.c
|
||||
@@ -1564,7 +1564,7 @@ static const char *command_to_string(const enum todo_command command)
|
||||
|
||||
static char command_to_char(const enum todo_command command)
|
||||
{
|
||||
- if (command < TODO_COMMENT && todo_command_info[command].c)
|
||||
+ if (command < TODO_COMMENT)
|
||||
return todo_command_info[command].c;
|
||||
return comment_line_char;
|
||||
}
|
||||
@@ -4947,6 +4947,8 @@ static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_lis
|
||||
max = num;
|
||||
|
||||
for (item = todo_list->items, i = 0; i < max; i++, item++) {
|
||||
+ char cmd;
|
||||
+
|
||||
/* if the item is not a command write it and continue */
|
||||
if (item->command >= TODO_COMMENT) {
|
||||
strbuf_addf(buf, "%.*s\n", item->arg_len,
|
||||
@@ -4955,8 +4957,9 @@ static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_lis
|
||||
}
|
||||
|
||||
/* add command to the buffer */
|
||||
- if (flags & TODO_LIST_ABBREVIATE_CMDS)
|
||||
- strbuf_addch(buf, command_to_char(item->command));
|
||||
+ cmd = command_to_char(item->command);
|
||||
+ if ((flags & TODO_LIST_ABBREVIATE_CMDS) && cmd)
|
||||
+ strbuf_addch(buf, cmd);
|
||||
else
|
||||
strbuf_addstr(buf, command_to_string(item->command));
|
||||
|
||||
--
|
||||
2.26.0
|
||||
|
@ -0,0 +1,64 @@
|
||||
From de9f1d3ef45ec885339d04f9e34293eb2de8605d Mon Sep 17 00:00:00 2001
|
||||
From: Alban Gruin <alban.gruin@gmail.com>
|
||||
Date: Mon, 30 Mar 2020 14:42:36 +0200
|
||||
Subject: [PATCH 2/2] t3432: test `--merge' with `rebase.abbreviateCommands =
|
||||
true', too
|
||||
|
||||
When fast forwarding, `git --merge' should act the same whether
|
||||
`rebase.abbreviateCommands' is set or not, but so far it was not the
|
||||
case. This duplicates the tests ensuring that `--merge' works when fast
|
||||
forwarding to check if it also works with abbreviated commands.
|
||||
|
||||
Signed-off-by: Alban Gruin <alban.gruin@gmail.com>
|
||||
Signed-off-by: Junio C Hamano <gitster@pobox.com>
|
||||
---
|
||||
t/t3432-rebase-fast-forward.sh | 24 +++++++++++++++++++-----
|
||||
1 file changed, 19 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/t/t3432-rebase-fast-forward.sh b/t/t3432-rebase-fast-forward.sh
|
||||
index 6c9d4a1375..6f0452c0ea 100755
|
||||
--- a/t/t3432-rebase-fast-forward.sh
|
||||
+++ b/t/t3432-rebase-fast-forward.sh
|
||||
@@ -28,10 +28,12 @@ test_rebase_same_head () {
|
||||
shift &&
|
||||
cmp_f="$1" &&
|
||||
shift &&
|
||||
- test_rebase_same_head_ $status_n $what_n $cmp_n " --apply" "$*" &&
|
||||
- test_rebase_same_head_ $status_f $what_f $cmp_f " --apply --no-ff" "$*"
|
||||
- test_rebase_same_head_ $status_n $what_n $cmp_n " --merge" "$*" &&
|
||||
- test_rebase_same_head_ $status_f $what_f $cmp_f " --merge --no-ff" "$*"
|
||||
+ test_rebase_same_head_ $status_n $what_n $cmp_n 0 " --apply" "$*" &&
|
||||
+ test_rebase_same_head_ $status_f $what_f $cmp_f 0 " --apply --no-ff" "$*"
|
||||
+ test_rebase_same_head_ $status_n $what_n $cmp_n 0 " --merge" "$*" &&
|
||||
+ test_rebase_same_head_ $status_f $what_f $cmp_f 0 " --merge --no-ff" "$*"
|
||||
+ test_rebase_same_head_ $status_n $what_n $cmp_n 1 " --merge" "$*" &&
|
||||
+ test_rebase_same_head_ $status_f $what_f $cmp_f 1 " --merge --no-ff" "$*"
|
||||
}
|
||||
|
||||
test_rebase_same_head_ () {
|
||||
@@ -41,9 +43,21 @@ test_rebase_same_head_ () {
|
||||
shift &&
|
||||
cmp="$1" &&
|
||||
shift &&
|
||||
+ abbreviate="$1" &&
|
||||
+ shift &&
|
||||
flag="$1"
|
||||
shift &&
|
||||
- test_expect_$status "git rebase$flag $* with $changes is $what with $cmp HEAD" "
|
||||
+ if test $abbreviate -eq 1
|
||||
+ then
|
||||
+ msg="git rebase$flag $* (rebase.abbreviateCommands = true) with $changes is $what with $cmp HEAD"
|
||||
+ else
|
||||
+ msg="git rebase$flag $* with $changes is $what with $cmp HEAD"
|
||||
+ fi &&
|
||||
+ test_expect_$status "$msg" "
|
||||
+ if test $abbreviate -eq 1
|
||||
+ then
|
||||
+ test_config rebase.abbreviateCommands true
|
||||
+ fi &&
|
||||
oldhead=\$(git rev-parse HEAD) &&
|
||||
test_when_finished 'git reset --hard \$oldhead' &&
|
||||
cp .git/logs/HEAD expect &&
|
||||
--
|
||||
2.26.0
|
||||
|
12
git.spec
12
git.spec
@ -85,7 +85,7 @@
|
||||
|
||||
Name: git
|
||||
Version: 2.26.0
|
||||
Release: 1%{?rcrev}%{?dist}.1
|
||||
Release: 2%{?rcrev}%{?dist}
|
||||
Summary: Fast Version Control System
|
||||
License: GPLv2
|
||||
URL: https://git-scm.com/
|
||||
@ -117,6 +117,13 @@ Source99: print-failed-test-output
|
||||
# https://bugzilla.redhat.com/490602
|
||||
Patch0: git-cvsimport-Ignore-cvsps-2.2b1-Branches-output.patch
|
||||
|
||||
# Fix issue with fast-forward rebases when rebase.abbreviateCommands is set
|
||||
# https://lore.kernel.org/git/9b4bc756764d87c9f34c11e6ec2fc6482f531805.camel@gmail.com/
|
||||
# https://github.com/git/git/commit/68e7090f31
|
||||
Patch1: 0001-sequencer-don-t-abbreviate-a-command-if-it-doesn-t-h.patch
|
||||
# https://github.com/git/git/commit/de9f1d3ef4
|
||||
Patch2: 0002-t3432-test-merge-with-rebase.abbreviateCommands-true.patch
|
||||
|
||||
%if %{with docs}
|
||||
# pod2man is needed to build Git.3pm
|
||||
BuildRequires: %{_bindir}/pod2man
|
||||
@ -1053,6 +1060,9 @@ rmdir --ignore-fail-on-non-empty "$testdir"
|
||||
%{?with_docs:%{_pkgdocdir}/git-svn.html}
|
||||
|
||||
%changelog
|
||||
* Sat Apr 04 2020 Todd Zullinger <tmz@pobox.com> - 2.26.0-2
|
||||
- fix issue with fast-forward rebases when rebase.abbreviateCommands is set
|
||||
|
||||
* Thu Apr 02 2020 Björn Esser <besser82@fedoraproject.org> - 2.26.0-1.1
|
||||
- Fix string quoting for rpm >= 4.16
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user