Hi, On Mon, 18 Nov 2019, Doan Tran Cong Danh wrote: > 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@xxxxxxxxx> > --- Looks obviously correct to me. ACK! Thank you, Dscho > Sorry for the noise, I forgot to check spelling for v1 > > And I forgot to delete From line when append to my MUA. > > Range-diff against v1: > 1: 48205889b4 ! 1: 9246beacf2 sequencer: handle rebase-merge for "onto" message > @@ Metadata > Author: Doan Tran Cong Danh <congdanhqx@xxxxxxxxx> > > ## Commit message ## > - sequencer: handle rebase-merge for "onto" message > + 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 > - suffixing an unique number if any duplicate is found. > + appending an unique number if any duplicate is found. > > - But we forgat that beside of those labels for side branches, > - we also make a special label `onto' for our so-called new-base. > + 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. > > sequencer.c | 5 +++++ > t/t3430-rebase-merges.sh | 21 +++++++++++++++++++++ > 2 files changed, 26 insertions(+) > > diff --git a/sequencer.c b/sequencer.c > index 350045b1b4..fc81e43f0f 100644 > --- a/sequencer.c > +++ b/sequencer.c > @@ -4569,10 +4569,15 @@ static int make_script_with_merges(struct pretty_print_context *pp, > strbuf_init(&state.buf, 32); > > 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; > FLEX_ALLOC_STR(entry, string, "onto"); > oidcpy(&entry->entry.oid, oid); > 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); > } > > /* > diff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh > index f728aba995..4e2c0ede51 100755 > --- a/t/t3430-rebase-merges.sh > +++ b/t/t3430-rebase-merges.sh > @@ -474,4 +474,25 @@ test_expect_success '--rebase-merges with commit that can generate bad character > 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 > -- > 2.24.0.10.gc61c3b979f.dirty > >