diff options
| author | Doan Tran Cong Danh <congdanhqx@gmail.com> | 2019-11-18 18:57:47 +0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2019-11-20 11:53:57 +0900 |
| commit | e02058a72967b18bd906674de6191f42d03b0763 (patch) | |
| tree | d5f2580ad5866c767ad05111f5ae096b054b8ee1 | |
| parent | rebase -r: let `label` generate safer labels (diff) | |
| download | git-e02058a72967b18bd906674de6191f42d03b0763.tar.gz git-e02058a72967b18bd906674de6191f42d03b0763.zip | |
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>
| -rw-r--r-- | sequencer.c | 5 | ||||
| -rwxr-xr-x | t/t3430-rebase-merges.sh | 21 |
2 files changed, 26 insertions, 0 deletions
diff --git a/sequencer.c b/sequencer.c index fece07b680..9147d02f53 100644 --- a/sequencer.c +++ b/sequencer.c @@ -4560,10 +4560,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 |
