RE: [PATCH] pull: abort if --ff-only is given and fast-forwarding is impossible

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

 



Alex Henrie wrote:
> The warning about pulling without specifying how to reconcile divergent
> branches says that after setting pull.rebase to true, --ff-only can
> still be passed on the command line to require a fast-forward. Make that
> actually work.

I don't know where that is being said, but it's wrong: --ff-only is
meant for merge only.

> --- a/builtin/pull.c
> +++ b/builtin/pull.c
> @@ -1046,9 +1046,14 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
>  
>  	can_ff = get_can_ff(&orig_head, &merge_heads.oid[0]);
>  
> -	if (rebase_unspecified && !opt_ff && !can_ff) {
> -		if (opt_verbosity >= 0)
> -			show_advice_pull_non_ff();
> +	if (!can_ff) {
> +		if (opt_ff) {
> +			if (!strcmp(opt_ff, "--ff-only"))
> +				die_ff_impossible();

As I've mentioned multiple times already, this is wrong.

The advice clearly says:

  You can also pass --rebase, --no-rebase, or --ff-only on the command
  line to override the configured default per invocation.

With your patch now this is even less true:

  git -c pull.ff=only pull --rebase

> +		} else {
> +			if (rebase_unspecified && opt_verbosity >= 0)
> +				show_advice_pull_non_ff();
> +		}
>  	}
>  
>  	if (opt_rebase) {
> diff --git a/t/t7601-merge-pull-config.sh b/t/t7601-merge-pull-config.sh
> index 52e8ccc933..b5a09a60f9 100755
> --- a/t/t7601-merge-pull-config.sh
> +++ b/t/t7601-merge-pull-config.sh
> @@ -183,6 +183,30 @@ test_expect_success 'pull prevents non-fast-forward with "only" in pull.ff' '
>  	test_must_fail git pull . c3
>  '

Can you add this test [1] so I don't have to explain the same thing over
and over?

  test_expect_success 'pull allows non-fast-forward with "only" in pull.ff if --rebase' '
    git reset --hard c1 &&
    test_config pull.ff only &&
    git pull --rebase . c3
  '

Cheers.

> +test_expect_success 'pull prevents non-fast-forward with pull.ff=only and pull.rebase=true' '
> +	git reset --hard c1 &&
> +	test_config pull.ff only &&
> +	test_config pull.rebase true &&
> +	test_must_fail git pull . c3
> +'
> +
> +test_expect_success 'pull prevents non-fast-forward with pull.ff=only and pull.rebase=false' '
> +	git reset --hard c1 &&
> +	test_config pull.ff only &&
> +	test_config pull.rebase false &&
> +	test_must_fail git pull . c3
> +'
> +
> +test_expect_success 'pull prevents non-fast-forward with --rebase --ff-only' '
> +	git reset --hard c1 &&
> +	test_must_fail git pull --rebase --ff-only . c3
> +'
> +
> +test_expect_success 'pull prevents non-fast-forward with --no-rebase --ff-only' '
> +	git reset --hard c1 &&
> +	test_must_fail git pull --no-rebase --ff-only . c3
> +'
> +
>  test_expect_success 'merge c1 with c2 (ours in pull.twohead)' '
>  	git reset --hard c1 &&
>  	git config pull.twohead ours &&
> -- 

[1] https://lore.kernel.org/git/20210711170703.651081-1-felipe.contreras@xxxxxxxxx/

-- 
Felipe Contreras



[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