Re: [PATCH v2] sequencer: handle rebase-merges for "onto" message
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Nov 18, 2019, 20:15 UTC
- Message-ID
- <nycvar.QRO.7.76.6.1911182114030.46@tvgsbejvaqbjf.bet>
- In-Reply-To
- <20191118115747.31533-1-congdanhqx@gmail.com>
Hi,
On Mon, 18 Nov 2019, Doan Tran Cong Danh wrote:
Show 16 quoted lines
> 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> > ---
Looks obviously correct to me. ACK!
Thank you, Dscho
Show 86 quoted lines
> 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@gmail.com>
>
> ## 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
>
>