Thread (52 messages) 52 messages, 4 authors, 2020-12-07

Re: [PATCH v2 11/14] tentative: pull: change the semantics of --ff-only

From: Elijah Newren <hidden>
Date: 2020-12-04 23:40:27

On Thu, Dec 3, 2020 at 10:16 PM Felipe Contreras
[off-list ref] wrote:
We want --ff-only to make sense only when no --merge or --rebase option
is specified.
A lot of git commands have opposite options, and git allows them both
to be specified with the last one winning.  Thus, much like
  git log --patch --no-patch
mean show logs without patches and
  git log --no-patch --patch
means show logs with patches, I would similarly expect the following
two commands to have opposite behavior:
  git pull --merge --no-ff
  git pull --no-ff --merge

quoted hunk ↗ jump to hunk
Currently --rebase already ignores --ff-only (or any other --ff option),
but --merge fails.

Make it so --ff-only is only considered in the default mode.

Signed-off-by: Felipe Contreras <redacted>
---
 builtin/pull.c  | 4 ++++
 t/t5520-pull.sh | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/builtin/pull.c b/builtin/pull.c
index f54ff36b57..ebf2ac687b 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -1037,6 +1037,10 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
                }
        }

+       /* Disable --ff-only when --merge is specified */
+       if (!can_ff && !default_mode && !opt_rebase && opt_ff && !strcmp(opt_ff, "--ff-only"))
+               opt_ff = NULL;
+
        if (opt_rebase) {
                int ret = 0;
                if ((recurse_submodules == RECURSE_SUBMODULES_ON ||
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index fdd1f79b06..eec6224fb0 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -843,7 +843,7 @@ test_expect_success 'git pull non-fast-forward (ff-only)' '
        test_must_fail git pull
 '

-test_expect_failure 'git pull non-fast-forward with merge (ff-only)' '
+test_expect_success 'git pull non-fast-forward with merge (ff-only)' '
        test_when_finished "git checkout master && git branch -D other test" &&
        test_config pull.ff only &&
        git checkout -b other master^ &&
--
2.29.2
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help