Re: [PATCH 05/15] rebase: fix handling of restrict_revision

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



"Elijah Newren via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes:

> From: Elijah Newren <newren@xxxxxxxxx>
>
> restrict_revision in the original shell script was an excluded revision
> range.  It is also treated that way by the am-backend.  In the
> conversion from shell to C (see commit 6ab54d17be3f ("rebase -i:
> implement the logic to initialize $revisions in C", 2018-08-28)), the
> interactive-backend accidentally treated it as a positive revision
> rather than a negated one.
>
> This was missed as there were no tests in the testsuite that tested an
> interactive rebase with fork-point behavior.

Thanks.

> Signed-off-by: Elijah Newren <newren@xxxxxxxxx>
> ---
>  builtin/rebase.c  |  4 ++--
>  t/t3400-rebase.sh | 20 +++++++++++++++++++-
>  2 files changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index cc8f3f008f..b320bb3a30 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -364,8 +364,8 @@ static int do_interactive_rebase(struct rebase_options *opts, unsigned flags)
>  
>  	argv_array_pushl(&make_script_args, "", revisions, NULL);
>  	if (opts->restrict_revision)
> -		argv_array_push(&make_script_args,
> -				oid_to_hex(&opts->restrict_revision->object.oid));
> +		argv_array_pushf(&make_script_args, "^%s",
> +				 oid_to_hex(&opts->restrict_revision->object.oid));
>  
>  	ret = sequencer_make_script(the_repository, &todo_list.buf,
>  				    make_script_args.argc, make_script_args.argv,
> diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
> index 79762b989a..71fd6396cd 100755
> --- a/t/t3400-rebase.sh
> +++ b/t/t3400-rebase.sh
> @@ -165,11 +165,29 @@ test_expect_success 'rebase works with format.useAutoBase' '
>  	git rebase master
>  '
>  
> -test_expect_success 'default to common base in @{upstream}s reflog if no upstream arg' '
> +test_expect_success 'default to common base in @{upstream}s reflog if no upstream arg (--merge)' '
>  	git checkout -b default-base master &&
>  	git checkout -b default topic &&
>  	git config branch.default.remote . &&
>  	git config branch.default.merge refs/heads/default-base &&
> +	git rebase --merge &&
> +	git rev-parse --verify default-base >expect &&
> +	git rev-parse default~1 >actual &&
> +	test_cmp expect actual &&
> +	git checkout default-base &&
> +	git reset --hard HEAD^ &&
> +	git checkout default &&
> +	git rebase --merge &&
> +	git rev-parse --verify default-base >expect &&
> +	git rev-parse default~1 >actual &&
> +	test_cmp expect actual
> +'
> +
> +test_expect_success 'default to common base in @{upstream}s reflog if no upstream arg' '
> +	git checkout -B default-base master &&
> +	git checkout -B default topic &&
> +	git config branch.default.remote . &&
> +	git config branch.default.merge refs/heads/default-base &&
>  	git rebase &&
>  	git rev-parse --verify default-base >expect &&
>  	git rev-parse default~1 >actual &&



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux