Thread (100 messages) 100 messages, 7 authors, 2022-07-21
STALE1413d
Revisions (2)
  1. v4 current
  2. v5 [diff vs current]

[PATCH v4 11/12] sequencer: ignore HEAD ref under --update-refs

From: Derrick Stolee via GitGitGadget <hidden>
Date: 2022-07-12 13:07:57
Subsystem: the rest · Maintainer: Linus Torvalds

From: Derrick Stolee <redacted>

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 <redacted>
Signed-off-by: Derrick Stolee <redacted>
---
 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help