]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pull: make --rebase and --no-rebase override pull.ff=only
authorElijah Newren <newren@gmail.com>
Thu, 22 Jul 2021 05:04:47 +0000 (05:04 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 22 Jul 2021 18:54:29 +0000 (11:54 -0700)
Fix the last few precedence tests failing in t7601 by now implementing
the logic to have --[no-]rebase override a pull.ff=only config setting.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pull.c
t/t7601-merge-pull-config.sh

index 1f452020375fce2c028482bff00ac75db9ad949f..9bf032552911b00e328a52deca9c027303f1cadd 100644 (file)
@@ -966,8 +966,22 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
 
        parse_repo_refspecs(argc, argv, &repo, &refspecs);
 
-       if (!opt_ff)
+       if (!opt_ff) {
                opt_ff = xstrdup_or_null(config_get_ff());
+               /*
+                * A subtle point: opt_ff was set on the line above via
+                * reading from config.  opt_rebase, in contrast, is set
+                * before this point via command line options.  The setting
+                * of opt_rebase via reading from config (using
+                * config_get_rebase()) does not happen until later.  We
+                * are relying on the next if-condition happening before
+                * the config_get_rebase() call so that an explicit
+                * "--rebase" can override a config setting of
+                * pull.ff=only.
+                */
+               if (opt_rebase >= 0 && opt_ff && !strcmp(opt_ff, "--ff-only"))
+                       opt_ff = "--ff";
+       }
 
        if (opt_rebase < 0)
                opt_rebase = config_get_rebase(&rebase_unspecified);
index d1f621725ad27bd5e45dff81961bd522d737d5ad..0c0dfecd2a3b21c5bce7953c77b1e02b3ce7cdb6 100755 (executable)
@@ -260,11 +260,11 @@ test_expect_success '--ff-only takes precedence over pull.rebase=false' '
        test_attempts_fast_forward -c pull.rebase=false pull --ff-only
 '
 
-test_expect_failure '--no-rebase takes precedence over pull.ff=only' '
+test_expect_success '--no-rebase takes precedence over pull.ff=only' '
        test_falls_back_to_full_merge -c pull.ff=only pull --no-rebase
 '
 
-test_expect_failure '--rebase takes precedence over pull.ff=only' '
+test_expect_success '--rebase takes precedence over pull.ff=only' '
        test_does_rebase -c pull.ff=only pull --rebase
 '