pull: should be noop when already-up-to-date
PATCH 1/1 pull: should be noop when already-up-to-date
From: Erwin Villejo <[email protected]>
The already-up-to-date pull bug was fixed for --ff-only but it did not include the case where --ff or --ff-only are not specified. This updates the --ff-only fix to include the case where --ff or --ff-only are not specified in command line flags or config.
---
pull: should be noop when already-up-to-date
The already-up-to-date pull bug was fixed for --ff-only but it did not include the case where --ff or --ff-only are not specified. This updates the --ff-only fix to include the case where --ff or --ff-only are not specified in command line flags or config.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1078%2Ferwinv%2Fmaster-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1078/erwinv/master-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1078
builtin/pull.c | 6 ++++-- t/t7601-merge-pull-config.sh | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-)
builtin/pull.c +4 -2
@@ -988,6 +988,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)struct object_id rebase_fork_point;int rebase_unspecified =0 ;int can_ff; +int divergent;if (!getenv ("GIT_REFLOG_ACTION" ))set_reflog_message (argc, argv);
@@ -1102,15 +1103,16 @@ int cmd_pull(int argc, const char **argv, const char *prefix) } can_ff =get_can_ff (&orig_head, &merge_heads); + divergent = !can_ff && !already_up_to_date (&orig_head, &merge_heads);/* ff-only takes precedence over rebase */ if (opt_ff && !strcmp (opt_ff,"--ff-only" )) { -if (!can_ff && !already_up_to_date (&orig_head, &merge_heads)) +if (divergent)die_ff_impossible (); opt_rebase =REBASE_FALSE ; }/* If no action specified and we can't fast forward, then warn. */ -if (!opt_ff && rebase_unspecified && !can_ff) { +if (!opt_ff && rebase_unspecified && divergent) {show_advice_pull_non_ff ();die (_ ("Need to specify how to reconcile divergent branches." )); }
t/t7601-merge-pull-config.sh +6 -0
@@ -387,6 +387,12 @@ test_expect_success 'pull prevents non-fast-forward with "only" in pull.ff' ' test_must_fail git pull . c3 ' +test_expect_success 'already-up-to-date pull succeeds with unspecified pull.ff' ' + git reset --hard c1 && + git pull . c0 && + test "$(git rev-parse HEAD)" = "$(git rev-parse c1)" +' + test_expect_success 'already-up-to-date pull succeeds with "only" in pull.ff' ' git reset --hard c1 && test_config pull.ff only &&
base-commit: cd3e606211bb1cf8bc57f7d76bab98cc17a150bc
Signature · 1 line
gitgitgadget
Quoted 19 lines · Erwin Villejo via GitGitGadget
From: Erwin Villejo <[email protected]>
The already-up-to-date pull bug was fixed for --ff-only but it did not include the case where --ff or --ff-only are not specified. This updates the --ff-only fix to include the case where --ff or --ff-only are not specified in command line flags or config.
Signed-off-by Erwin Villejo <[email protected]>---
builtin/pull.c +1
-1@@ -1102,15 +1103,16 @@ int cmd_pull(int argc, const char **argv, const char *prefix) } can_ff =get_can_ff (&orig_head, &merge_heads); + divergent = !can_ff && !already_up_to_date (&orig_head, &merge_heads);/* ff-only takes precedence over rebase */ if (opt_ff && !strcmp (opt_ff,"--ff-only" )) { -if (!can_ff && !already_up_to_date (&orig_head, &merge_heads))
builtin/pull.c int cmd_pull(int argc, const char **argv, const char *prefix) · line 1118
Quoted 10 lines
builtin/pull.c +2
-1+if (divergent)die_ff_impossible (); opt_rebase =REBASE_FALSE ; }/* If no action specified and we can't fast forward, then warn. */ -if (!opt_ff && rebase_unspecified && !can_ff) { +if (!opt_ff && rebase_unspecified && divergent) {show_advice_pull_non_ff ();die (_ ("Need to specify how to reconcile divergent branches." )); }
Looks correct. I wonder if there is a simplify these two checks, but let's keep the original code structure for now in this step, which is about correctness.
Will apply. Thanks.
Quoted 19 lines
t/t7601-merge-pull-config.sh +6
-0@@ -387,6 +387,12 @@ test_expect_success 'pull prevents non-fast-forward with "only" in pull.ff' ' test_must_fail git pull . c3 ' +test_expect_success 'already-up-to-date pull succeeds with unspecified pull.ff' ' + git reset --hard c1 && + git pull . c0 && + test "$(git rev-parse HEAD)" = "$(git rev-parse c1)" +' + test_expect_success 'already-up-to-date pull succeeds with "only" in pull.ff' ' git reset --hard c1 && test_config pull.ff only &&base-commit:
cd3e606211bb1cf8bc57f7d76bab98cc17a150bc