From: "Alex Henrie via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Alex Henrie <alexhenrie24@gmail.com>,
Phillip Wood <phillip.wood123@gmail.com>,
Son Luong Ngoc <sluongng@gmail.com>,
Elijah Newren <newren@gmail.com>,
Alex Henrie <alexhenrie24@gmail.com>
Subject: [PATCH 4/5] pull: abort if --ff-only is given and fast-forwarding is impossible
Date: Thu, 15 Jul 2021 02:40:48 +0000 [thread overview]
Message-ID: <12ee3b140b4e1170bc725753cda56a4426823bdc.1626316849.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1047.git.git.1626316849.gitgitgadget@gmail.com>
From: Alex Henrie <alexhenrie24@gmail.com>
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.
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
advice.c | 5 +++++
advice.h | 1 +
builtin/merge.c | 2 +-
builtin/pull.c | 11 ++++++++---
t/t7601-merge-pull-config.sh | 24 ++++++++++++++++++++++++
5 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/advice.c b/advice.c
index 0b9c89c48ab..337e8f342bc 100644
--- a/advice.c
+++ b/advice.c
@@ -286,6 +286,11 @@ void NORETURN die_conclude_merge(void)
die(_("Exiting because of unfinished merge."));
}
+void NORETURN die_ff_impossible(void)
+{
+ die(_("Not possible to fast-forward, aborting."));
+}
+
void advise_on_updating_sparse_paths(struct string_list *pathspec_list)
{
struct string_list_item *item;
diff --git a/advice.h b/advice.h
index bd26c385d00..16240438387 100644
--- a/advice.h
+++ b/advice.h
@@ -95,6 +95,7 @@ void advise_if_enabled(enum advice_type type, const char *advice, ...);
int error_resolve_conflict(const char *me);
void NORETURN die_resolve_conflict(const char *me);
void NORETURN die_conclude_merge(void);
+void NORETURN die_ff_impossible(void);
void advise_on_updating_sparse_paths(struct string_list *pathspec_list);
void detach_advice(const char *new_name);
diff --git a/builtin/merge.c b/builtin/merge.c
index a8a843b1f54..aa920ac524f 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -1620,7 +1620,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
}
if (fast_forward == FF_ONLY)
- die(_("Not possible to fast-forward, aborting."));
+ die_ff_impossible();
if (autostash)
create_autostash(the_repository,
diff --git a/builtin/pull.c b/builtin/pull.c
index b355fd38794..2c90bbb1588 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -1070,9 +1070,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();
+ } 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 73a0dbdf25a..6b9e80db97b 100755
--- a/t/t7601-merge-pull-config.sh
+++ b/t/t7601-merge-pull-config.sh
@@ -250,6 +250,30 @@ test_expect_success 'pull prevents non-fast-forward with "only" in pull.ff' '
test_must_fail git pull . c3
'
+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 &&
--
gitgitgadget
next prev parent reply other threads:[~2021-07-15 2:41 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-15 2:40 [PATCH 0/5] Handle conflicting pull options Elijah Newren via GitGitGadget
2021-07-15 2:40 ` [PATCH 1/5] pull: move definitions of parse_config_rebase and parse_opt_rebase Elijah Newren via GitGitGadget
2021-07-15 2:40 ` [PATCH 2/5] pull: convert OPT_PASSTHRU for fast-forward options to OPT_CALLBACK Elijah Newren via GitGitGadget
2021-07-15 2:40 ` [PATCH 3/5] pull: handle conflicting rebase/merge options via last option wins Elijah Newren via GitGitGadget
2021-07-15 4:59 ` Eric Sunshine
2021-07-15 17:13 ` Elijah Newren
2021-07-15 9:44 ` Felipe Contreras
2021-07-15 17:33 ` Junio C Hamano
2021-07-15 17:46 ` Felipe Contreras
2021-07-15 19:04 ` Elijah Newren
2021-07-15 19:58 ` Junio C Hamano
2021-07-15 20:40 ` Elijah Newren
2021-07-15 21:12 ` Junio C Hamano
2021-07-16 18:39 ` Elijah Newren
2021-07-16 21:18 ` Junio C Hamano
2021-07-16 21:56 ` Felipe Contreras
2021-07-15 20:17 ` Junio C Hamano
2021-07-15 20:38 ` Elijah Newren
2021-07-15 2:40 ` Alex Henrie via GitGitGadget [this message]
2021-07-15 2:40 ` [PATCH 5/5] pull: abort by default when fast-forwarding is not possible Elijah Newren via GitGitGadget
2021-07-15 5:18 ` Eric Sunshine
2021-07-15 16:56 ` Elijah Newren
2021-07-15 9:48 ` Felipe Contreras
2021-07-16 9:32 ` Ævar Arnfjörð Bjarmason
2021-07-16 18:13 ` Felipe Contreras
2021-07-15 9:37 ` [PATCH 0/5] Handle conflicting pull options Felipe Contreras
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=12ee3b140b4e1170bc725753cda56a4426823bdc.1626316849.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=alexhenrie24@gmail.com \
--cc=git@vger.kernel.org \
--cc=newren@gmail.com \
--cc=phillip.wood123@gmail.com \
--cc=sluongng@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).