sequencer: ignore HEAD ref under --update-refs

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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee 2022-07-19 18:33:43 +00:00 коммит произвёл Junio C Hamano
Родитель 3113fedaeb
Коммит aa37f3e1d8
1 изменённых файлов: 13 добавлений и 0 удалений

Просмотреть файл

@ -5888,12 +5888,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);