[PATCH v4 11/12] sequencer: ignore HEAD ref under --update-refs
- From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jul 12, 2022, 13:07 UTC
- Message-ID
- <d53b4ff2cee0ca518ab4958a29e22602511f3691.1657631226.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1247.v4.git.1657631225.gitgitgadget@gmail.com>
From: Derrick Stolee <derrickstolee@github.com>
When using the 'git rebase -i --update-refs' option, the todo list is populated with 'update-ref' commands for all tip refs in the history that is being rebased. Refs that are checked out by some worktree are instead added as a comment to warn the user that they will not be updated.
Until now, this included the HEAD ref, which is being updated by the rebase process itself, regardless of the --update-refs option. Remove the comment in this case by ignoring any decorations that match the HEAD ref.
Reported-by: Elijah Newren <newren@gmail.com> Signed-off-by: Derrick Stolee <derrickstolee@github.com> --- sequencer.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/sequencer.c b/sequencer.c index 2808c027d68..82ef062d497 100644 --- a/sequencer.c +++ b/sequencer.c @@ -5855,12 +5855,25 @@ static int add_decorations_to_list(const struct commit *commit, struct todo_add_branch_context *ctx) { const struct name_decoration *decoration = get_name_decoration(&commit->object); + const char *head_ref = resolve_ref_unsafe("HEAD", + RESOLVE_REF_READING, + NULL, + NULL); while (decoration) { struct todo_item *item; const char *path; size_t base_offset = ctx->buf->len; + /* + * If the branch is the current HEAD, then it will be + * updated by the default rebase behavior. + */ + if (head_ref && !strcmp(head_ref, decoration->name)) { + decoration = decoration->next; + continue; + } + ALLOC_GROW(ctx->items, ctx->items_nr + 1, ctx->items_alloc);
-- gitgitgadget