RE: [PATCH] pull: abort if --ff-only is given and fast-forwarding is impossible
From: Felipe Contreras <hidden>
Date: 2021-07-11 17:08:50
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.
quoted hunk ↗ jump to hunk
--- 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
quoted hunk ↗ jump to hunk
+ } 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@gmail.com/ (local) -- Felipe Contreras