]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sequencer: comment checked-out branch properly
authorKristoffer Haugsbakk <code@khaugsbakk.name>
Mon, 25 Nov 2024 20:13:11 +0000 (21:13 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 26 Nov 2024 01:05:08 +0000 (10:05 +0900)
`git rebase --update-ref` does not insert commands for dependent/sub-
branches which are checked out.[1]  Instead it leaves a comment about
that fact.  The comment char is hardcoded (#).  In turn the comment
line gets interpreted as an invalid command when `core.commentChar`/
`core.commentString` is in use.

† 1: See 900b50c242 (rebase: add --update-refs option, 2022-07-19)

Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sequencer.c
t/t3400-rebase.sh

index 353d804999b88d5fd5dcf1254d80781f20e62f2e..1b6fd86f70bc4b2d836afb96be36776d784b5a0f 100644 (file)
@@ -6382,8 +6382,9 @@ static int add_decorations_to_list(const struct commit *commit,
                /* If the branch is checked out, then leave a comment instead. */
                if ((path = branch_checked_out(decoration->name))) {
                        item->command = TODO_COMMENT;
-                       strbuf_addf(ctx->buf, "# Ref %s checked out at '%s'\n",
-                                   decoration->name, path);
+                       strbuf_commented_addf(ctx->buf, comment_line_str,
+                                             "Ref %s checked out at '%s'\n",
+                                             decoration->name, path);
                } else {
                        struct string_list_item *sti;
                        item->command = TODO_UPDATE_REF;
index 09f230eefb2cbc03a6b8f85e0f5c39cfcb2467d5..7c47af6dcd9d4586b9f68b3ef408d3f2926d740e 100755 (executable)
@@ -456,4 +456,23 @@ test_expect_success 'rebase when inside worktree subdirectory' '
        )
 '
 
+test_expect_success 'git rebase --update-ref with core.commentChar and branch on worktree' '
+       test_when_finished git branch -D base topic2 &&
+       test_when_finished git checkout main &&
+       test_when_finished git branch -D wt-topic &&
+       test_when_finished git worktree remove wt-topic &&
+       git checkout main &&
+       git checkout -b base &&
+       git checkout -b topic2 &&
+       test_commit msg2 &&
+       git worktree add wt-topic &&
+       git checkout base &&
+       test_commit msg3 &&
+       git checkout topic2 &&
+       GIT_SEQUENCE_EDITOR="cat >actual" git -c core.commentChar=% \
+                rebase -i --update-refs base &&
+       test_grep "% Ref refs/heads/wt-topic checked out at" actual &&
+       test_grep "% Ref refs/heads/topic2 checked out at" actual
+'
+
 test_done