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

Re: [PATCH 6/9] pull: make --rebase and --no-rebase override pull.ff=only

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 20, 2021, 23:53 UTC
Message-ID
<xmqqpmvcfsol.fsf@gitster.g>
In-Reply-To
<b379fea097d65a28f1791f7f2f9432b6689a977f.1626536508.git.gitgitgadget@gmail.com>
"Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Elijah Newren <newren@gmail.com>
>
> 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.

Because we only have opt_rebase and opt_ff, unless we are in a very early part of the code, we cannot tell if "opt_rebase >= 0" we see came from the command line or from the configuration, and because pull.rebase, pull.ff, --rebase=<kind>, and <--ff|--ff-only|--no-ff> have intricate interactions among them, we'd probably need to behave differently depending on where "opt_rebase >= 0" came from.

The new code works only because we haven't called config_get_rebase() yet in this part. If we swapped the order of "if ff is not set, then figure it out from the configuration" (the code you are extending) and "if rebase is not set, read from the configuration", then the logic would not work.

The resulting code looks correct, but it is subtle and may deserve an in-code comment.

Show 17 quoted lines
> Signed-off-by: Elijah Newren <newren@gmail.com>
> ---
>  builtin/pull.c               | 5 ++++-
>  t/t7601-merge-pull-config.sh | 4 ++--
>  2 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/builtin/pull.c b/builtin/pull.c
> index 5ba376a7487..7e7c90f6a10 100644
> --- a/builtin/pull.c
> +++ b/builtin/pull.c
> @@ -966,8 +966,11 @@ 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());
		/*
		 * Do we have --rebase=<kind> or --no-rebase from the
		 * command line (note that we haven't read pull.rebase yet)?
		 * If so, defeat the configured pull.ff=only; instead of
		 * failing to integrate divergent histories, we want the
		 * rebase or merge to happen.
		 */
> +		if (opt_rebase >= 0 && opt_ff && !strcmp(opt_ff, "--ff-only"))
> +			opt_ff = "--ff";
> +	}
Thanks.
Previous: Felipe ContrerasNext: Felipe Contreras
Message 22 of 59 in “Handle pull option precedence”
  1. 0/9 Handle pull option precedenceElijah Newren via GitGitGadget, Jul 17, 2021
  2. 2/9 t7601: add tests of interactions with multiple merge heads and configElijah Newren via GitGitGadget, Jul 17, 2021
  3. Felipe ContrerasJul 17, 2021
  4. Junio C HamanoJul 20, 2021
  5. Elijah NewrenJul 21, 2021
  6. 1/9 t7601: add relative precedence tests for merge and rebase flags/optionsElijah Newren via GitGitGadget, Jul 17, 2021
  7. Felipe ContrerasJul 17, 2021
  8. Junio C HamanoJul 19, 2021
  9. Elijah NewrenJul 20, 2021
  10. Junio C HamanoJul 20, 2021
  11. Felipe ContrerasJul 20, 2021
  12. 3/9 pull: abort if --ff-only is given and fast-forwarding is impossibleAlex Henrie via GitGitGadget, Jul 17, 2021
  13. Felipe ContrerasJul 17, 2021
  14. 4/9 pull: since --ff-only overrides, handle it firstElijah Newren via GitGitGadget, Jul 17, 2021
  15. Felipe ContrerasJul 17, 2021
  16. 5/9 pull: ensure --rebase overrides ability to ffElijah Newren via GitGitGadget, Jul 17, 2021
  17. Felipe ContrerasJul 17, 2021
  18. Junio C HamanoJul 20, 2021
  19. Elijah NewrenJul 21, 2021
  20. 6/9 pull: make --rebase and --no-rebase override pull.ff=onlyElijah Newren via GitGitGadget, Jul 17, 2021
  21. Felipe ContrerasJul 17, 2021
  22. Junio C HamanoJul 20, 2021
  23. Felipe ContrerasJul 21, 2021
  24. 8/9 pull: update docs & code for option compatibility with rebasingElijah Newren via GitGitGadget, Jul 17, 2021
  25. Junio C HamanoJul 21, 2021
  26. Elijah NewrenJul 21, 2021
  27. Junio C HamanoJul 21, 2021
  28. 7/9 pull: abort by default when fast-forwarding is not possibleElijah Newren via GitGitGadget, Jul 17, 2021
  29. Felipe ContrerasJul 17, 2021
  30. 9/9 pull: fix handling of multiple headsElijah Newren via GitGitGadget, Jul 17, 2021
  31. Felipe ContrerasJul 17, 2021
  32. 0/8 Handle pull option precedenceElijah Newren via GitGitGadget, Jul 21, 2021
  33. 3/8 pull: abort if --ff-only is given and fast-forwarding is impossibleAlex Henrie via GitGitGadget, Jul 21, 2021
  34. Felipe ContrerasJul 21, 2021
  35. 1/8 t7601: test interaction of merge/rebase/fast-forward flags and optionsElijah Newren via GitGitGadget, Jul 21, 2021
  36. Felipe ContrerasJul 21, 2021
  37. 2/8 t7601: add tests of interactions with multiple merge heads and configElijah Newren via GitGitGadget, Jul 21, 2021
  38. 5/8 pull: make --rebase and --no-rebase override pull.ff=onlyElijah Newren via GitGitGadget, Jul 21, 2021
  39. Felipe ContrerasJul 21, 2021
  40. 8/8 pull: fix handling of multiple headsElijah Newren via GitGitGadget, Jul 21, 2021
  41. 7/8 pull: update docs & code for option compatibility with rebasingElijah Newren via GitGitGadget, Jul 21, 2021
  42. 6/8 pull: abort by default when fast-forwarding is not possibleElijah Newren via GitGitGadget, Jul 21, 2021
  43. Felipe ContrerasJul 21, 2021
  44. 4/8 pull: since --ff-only overrides, handle it firstElijah Newren via GitGitGadget, Jul 21, 2021
  45. Matthias BaumgartenJul 21, 2021
  46. Felipe ContrerasJul 21, 2021
  47. Junio C HamanoJul 21, 2021
  48. Elijah NewrenJul 22, 2021
  49. Felipe ContrerasJul 21, 2021
  50. 0/8 Handle pull option precedenceElijah Newren via GitGitGadget, Jul 22, 2021
  51. 1/8 t7601: test interaction of merge/rebase/fast-forward flags and optionsElijah Newren via GitGitGadget, Jul 22, 2021
  52. 2/8 t7601: add tests of interactions with multiple merge heads and configElijah Newren via GitGitGadget, Jul 22, 2021
  53. 3/8 pull: abort if --ff-only is given and fast-forwarding is impossibleAlex Henrie via GitGitGadget, Jul 22, 2021
  54. 5/8 pull: make --rebase and --no-rebase override pull.ff=onlyElijah Newren via GitGitGadget, Jul 22, 2021
  55. 4/8 pull: since --ff-only overrides, handle it firstElijah Newren via GitGitGadget, Jul 22, 2021
  56. 6/8 pull: abort by default when fast-forwarding is not possibleElijah Newren via GitGitGadget, Jul 22, 2021
  57. 8/8 pull: fix handling of multiple headsElijah Newren via GitGitGadget, Jul 22, 2021
  58. 7/8 pull: update docs & code for option compatibility with rebasingElijah Newren via GitGitGadget, Jul 22, 2021
  59. Felipe ContrerasJul 22, 2021

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.