sequencer: handle rebase-merges for "onto" message
In order to work correctly, git-rebase --rebase-merges needs to make initial todo list with unique labels. Those unique labels is being handled by employing a hashmap and appending an unique number if any duplicate is found. But, we forget that beside those labels for side branches, we also have a special label `onto' for our so-called new-base. In a special case that any of those labels for side branches named `onto', git will run into trouble. Correct it. Signed-off-by: Doan Tran Cong Danh <congdanhqx@gmail.com> Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
cd5522271f
commit
e02058a729
@ -4560,10 +4560,15 @@ static int make_script_with_merges(struct pretty_print_context *pp,
|
|||||||
strbuf_init(&state.buf, 32);
|
strbuf_init(&state.buf, 32);
|
||||||
|
|
||||||
if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
|
if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
|
||||||
|
struct labels_entry *onto_label_entry;
|
||||||
struct object_id *oid = &revs->cmdline.rev[0].item->oid;
|
struct object_id *oid = &revs->cmdline.rev[0].item->oid;
|
||||||
FLEX_ALLOC_STR(entry, string, "onto");
|
FLEX_ALLOC_STR(entry, string, "onto");
|
||||||
oidcpy(&entry->entry.oid, oid);
|
oidcpy(&entry->entry.oid, oid);
|
||||||
oidmap_put(&state.commit2label, entry);
|
oidmap_put(&state.commit2label, entry);
|
||||||
|
|
||||||
|
FLEX_ALLOC_STR(onto_label_entry, label, "onto");
|
||||||
|
hashmap_entry_init(&onto_label_entry->entry, strihash("onto"));
|
||||||
|
hashmap_add(&state.labels, &onto_label_entry->entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -474,4 +474,25 @@ test_expect_success '--rebase-merges with commit that can generate bad character
|
|||||||
git rebase --rebase-merges --force-rebase E
|
git rebase --rebase-merges --force-rebase E
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '--rebase-merges with message matched with onto label' '
|
||||||
|
git checkout -b onto-label E &&
|
||||||
|
git merge -m onto G &&
|
||||||
|
git rebase --rebase-merges --force-rebase E &&
|
||||||
|
test_cmp_graph <<-\EOF
|
||||||
|
* onto
|
||||||
|
|\
|
||||||
|
| * G
|
||||||
|
| * F
|
||||||
|
* | E
|
||||||
|
|\ \
|
||||||
|
| * | B
|
||||||
|
* | | D
|
||||||
|
| |/
|
||||||
|
|/|
|
||||||
|
* | C
|
||||||
|
|/
|
||||||
|
* A
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user