git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 18/19] pull: advice of future changes

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Dec 8, 2020, 00:26 UTC
Message-ID
<20201208002648.1370414-19-felipe.contreras@gmail.com>
In-Reply-To
<20201208002648.1370414-1-felipe.contreras@gmail.com>

Now that we have "pull.mode=ff-only", we can make it the default any time we want to.

For now, simply explain the upcoming changes in the default warning, and mention how to turn on the future default mode.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 builtin/pull.c               | 20 +++++++++++---------
 t/t5520-pull.sh              |  8 ++++++++
 t/t7601-merge-pull-config.sh | 22 +++++++++++-----------
 3 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c
index 5a67667b79..734a2c04b8 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -1092,17 +1092,19 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
 		die(_("The pull was not fast-forward, please either merge or rebase.\n"));
 
 	if (!opt_rebase && !can_ff && opt_verbosity >= 0 && (!opt_ff || !strcmp(opt_ff, "--ff"))) {
-		advise(_("Pulling without specifying how to reconcile divergent branches is discouraged;\n"
-			"you need to specify if you want a merge, or a rebase.\n"
-			"You can squelch this message by running one of the following commands:\n"
+		advise(_("The pull was not fast-forward, in the future you will have to choose a merge, or a rebase.\n"
 			"\n"
-			"  git config pull.mode merge    # (the default strategy)\n"
-			"  git config pull.mode rebase\n"
-			"  git config pull.mode ff-only  # fast-forward only\n"
+			"To quell this message you have two main options:\n"
 			"\n"
-			"You can replace \"git config\" with \"git config --global\" to set a default\n"
-			"preference for all repositories.\n"
-			"If unsure, run \"git pull --merge\".\n"
+			"1. Adopt the new behavior:\n"
+			"\n"
+			"  git config --global pull.mode ff-only\n"
+			"\n"
+			"2. Maintain the current behavior:\n"
+			"\n"
+			"  git config --global pull.mode merge\n"
+			"\n"
+			"For now we will fall back to the traditional behavior (merge).\n"
 			"Read \"git pull --help\" for more information."));
 	}
 
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index b5b007b175..d4718dbc02 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -906,4 +906,12 @@ test_expect_success 'non-fast-forward error message (pull.mode=ff-only)' '
 	test_i18ngrep "The pull was not fast-forward" error
 '
 
+test_expect_success 'non-fast-forward warning (default)' '
+	setup_non_ff &&
+	git pull 2> error &&
+	cat error &&
+	test_i18ngrep "The pull was not fast-forward" error &&
+	test_i18ngrep "in the future you will have to choose" error
+'
+
 test_done
diff --git a/t/t7601-merge-pull-config.sh b/t/t7601-merge-pull-config.sh
index 25ca239c17..149fc2a009 100755
--- a/t/t7601-merge-pull-config.sh
+++ b/t/t7601-merge-pull-config.sh
@@ -32,71 +32,71 @@ test_expect_success 'pull.rebase not set' '
 	git -c color.advice=always pull . c1 2>err &&
 	test_decode_color <err >decoded &&
 	test_i18ngrep "<YELLOW>hint: " decoded &&
-	test_i18ngrep "Pulling without specifying how to reconcile" decoded
+	test_i18ngrep "in the future you will have to choose" decoded
 '
 
 test_expect_success 'pull.rebase not set (fast-forward)' '
 	git reset --hard c0 &&
 	git pull . c1 2>err &&
-	test_i18ngrep ! "Pulling without specifying how to reconcile" err
+	test_i18ngrep ! "in the future you will have to choose" err
 '
 
 test_expect_success 'pull.mode set' '
 	git reset --hard c2 &&
 	test_config pull.mode merge &&
 	git pull . c1 2>err &&
-	test_i18ngrep ! "Pulling without specifying how to reconcile" err
+	test_i18ngrep ! "in the future you will have to choose" err
 '
 
 test_expect_success 'pull.rebase not set and pull.ff=true' '
 	git reset --hard c2 &&
 	test_config pull.ff true &&
 	git pull . c1 2>err &&
-	test_i18ngrep "Pulling without specifying how to reconcile" err
+	test_i18ngrep "in the future you will have to choose" err
 '
 
 test_expect_success 'pull.rebase not set and pull.ff=false' '
 	git reset --hard c2 &&
 	test_config pull.ff false &&
 	git pull . c1 2>err &&
-	test_i18ngrep ! "Pulling without specifying how to reconcile" err
+	test_i18ngrep ! "in the future you will have to choose" err
 '
 
 test_expect_success 'pull.rebase not set and pull.ff=only' '
 	git reset --hard c2 &&
 	test_config pull.ff only &&
 	test_must_fail git pull . c1 2>err &&
-	test_i18ngrep ! "Pulling without specifying how to reconcile" err
+	test_i18ngrep ! "in the future you will have to choose" err
 '
 
 test_expect_success 'pull.rebase not set and --rebase given' '
 	git reset --hard c2 &&
 	git pull --rebase . c1 2>err &&
-	test_i18ngrep ! "Pulling without specifying how to reconcile" err
+	test_i18ngrep ! "in the future you will have to choose" err
 '
 
 test_expect_success 'pull.rebase not set and --merge given' '
 	git reset --hard c2 &&
 	git pull --merge . c1 2>err &&
-	test_i18ngrep ! "Pulling without specifying how to reconcile" err
+	test_i18ngrep ! "in the future you will have to choose" err
 '
 
 test_expect_success 'pull.rebase not set and --ff given' '
 	git reset --hard c2 &&
 	git pull --ff . c1 2>err &&
-	test_i18ngrep "Pulling without specifying how to reconcile" err
+	test_i18ngrep "in the future you will have to choose" err
 '
 
 test_expect_success 'pull.rebase not set and --no-ff given' '
 	git reset --hard c2 &&
 	git pull --no-ff . c1 2>err &&
-	test_i18ngrep ! "Pulling without specifying how to reconcile" err
+	test_i18ngrep ! "in the future you will have to choose" err
 '
 
 test_expect_success 'pull.rebase not set and --ff-only given' '
 	git reset --hard c2 &&
 	test_must_fail git pull --ff-only . c1 2>err &&
-	test_i18ngrep ! "Pulling without specifying how to reconcile" err
+	test_i18ngrep ! "in the future you will have to choose" err
 '
 
 test_expect_success 'merge c1 with c2' '
-- 
2.29.2
Previous: Felipe ContrerasNext: Felipe Contreras
Message 20 of 21 in “pull: default ff-only mode”
  1. 00/19 pull: default ff-only modeFelipe Contreras, Dec 8, 2020
  2. 01/19 doc: pull: explain what is a fast-forwardFelipe Contreras, Dec 8, 2020
  3. 02/19 pull: improve default warningFelipe Contreras, Dec 8, 2020
  4. 03/19 pull: refactor fast-forward checkFelipe Contreras, Dec 8, 2020
  5. 04/19 pull: cleanup autostash checkFelipe Contreras, Dec 8, 2020
  6. 06/19 pull: move default warningFelipe Contreras, Dec 8, 2020
  7. 05/19 pull: trivial cleanupFelipe Contreras, Dec 8, 2020
  8. 07/19 pull: display default warning only when non-ffFelipe Contreras, Dec 8, 2020
  9. 08/19 pull: trivial whitespace style fixFelipe Contreras, Dec 8, 2020
  10. 09/19 pull: introduce --merge optionFelipe Contreras, Dec 8, 2020
  11. 10/19 pull: show warning with --ffFelipe Contreras, Dec 8, 2020
  12. 11/19 rebase: add REBASE_DEFAULTFelipe Contreras, Dec 8, 2020
  13. 12/19 pull: move configurations fetchesFelipe Contreras, Dec 8, 2020
  14. 14/19 test: pull-options: revert unnecessary changesFelipe Contreras, Dec 8, 2020
  15. 15/19 pull: trivial memory fixFelipe Contreras, Dec 8, 2020
  16. 13/19 test: merge-pull-config: trivial cleanupFelipe Contreras, Dec 8, 2020
  17. 17/19 pull: add pull.mode=ff-onlyFelipe Contreras, Dec 8, 2020
  18. 19/19 future: pull: enable ff-only mode by defaultFelipe Contreras, Dec 8, 2020
  19. 16/19 pull: add pull.modeFelipe Contreras, Dec 8, 2020
  20. 18/19 pull: advice of future changesFelipe Contreras, Dec 8, 2020
  21. Felipe ContrerasDec 8, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.