@@ -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."));
}
@@ -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
@@ -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' '
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(-)