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

Re: [PATCH v5 3/3] rebase: add a config option for --rebase-merges

From
Alex Henrie <alexhenrie24@gmail.com>
Date
Mar 12, 2023, 20:57 UTC
Message-ID
<CAMMLpeTUbG+b89acan-GXGS4H=J7aQupbK8zdxwNg__U_We2dw@mail.gmail.com>
In-Reply-To
<5551d67b-3021-8cfc-53b5-318f223ded6d@dunelm.org.uk>
On Tue, Mar 7, 2023 at 9:23 AM Phillip Wood <phillip.wood123@gmail.com> wrote:
Show 30 quoted lines
> On 04/03/2023 23:24, Alex Henrie wrote:
> > On Thu, Mar 2, 2023 at 2:37 AM Phillip Wood <phillip.wood123@gmail.com> wrote:
> >
> >> On 25/02/2023 18:03, Alex Henrie wrote:
> >
> >>> +rebase.merges::
> >>> +     Whether and how to set the `--rebase-merges` option by default. Can
> >>> +     be `rebase-cousins`, `no-rebase-cousins`, or a boolean. Setting to
> >>> +     true is equivalent to `--rebase-merges` without an argument, setting to
> >>> +     `rebase-cousins` or `no-rebase-cousins` is equivalent to
> >>> +     `--rebase-merges` with that value as its argument, and setting to false
> >>> +     is equivalent to `--no-rebase-merges`. Passing `--rebase-merges` on the
> >>> +     command line without an argument overrides a `rebase.merges=false`
> >>> +     configuration but does not override other values of `rebase.merge`.
> >>
> >> I'm still not clear why the commandline doesn't override the config in
> >> all cases as is our usual practice. After all if the user has set
> >> rebase.merges then they don't need to pass --rebase-merges unless they
> >> want to override the config.
> >
> > Given the current push to turn rebase-merges on by default, it seems
> > likely that rebase-cousins will also be turned on by default at some
> > point after that.
>
> It is good to try and future proof things but this seems rather
> hypothetical. I don't really see how the choice of whether
> --rebase-merges is turned on by default is related to the choice of
> whether or not to rebase cousins by default. It is worth noting that the
> default was changed to from rebase-cousins to no-rebase-cousins early in
> the development of --rebase-merges[1] as it was felt to be less surprising.
> [1]
> https://lore.kernel.org/git/nycvar.QRO.7.76.6.1801292251240.35@ZVAVAG-6OXH6DA.rhebcr.pbec.zvpebfbsg.pbz/

Thank you for sharing that link. Even though I got the tests right, I got confused and started thinking that rebase-cousins was a more thorough version of rebase-merges. In fact, they do opposite things: rebase-merges tries to preserve the graph and rebase-cousins intentionally restructures the graph. In my opinion using the word "rebase" in the names of both options was another unfortunate UI decision, but I understand the difference now.

Show 16 quoted lines
> > There will be a warning about the default changing,
> > and we'll want to let users suppress that warning by setting
> > rebase.rebaseMerges=rebase-cousins. It would then be very confusing if
> > a --rebase-merges from some old alias continued to mean
> > --rebase-merges=no-rebase-cousins when the user expects it to start
> > behaving as though the default has already changed.
>
> But aren't you breaking those aliases now when
> rebase.rebaseMerges=rebase-cousins? That's what I'm objecting to. It
> seems like we're breaking things now to avoid a hypothetical future
> change breaking them which does not seem like the right trade off to me.
>
> It also does not fit with the way other optional arguments interact with
> their associated config setting. For example "git branch/checkout/switch
> --track" and branch.autoSetupMerge. If the optional argument to --track
> is omitted it defaults to "direct" irrespective of the config.

What I really don't want is to paint ourselves into a corner. You're right that it's unlikely that the default will ever change from no-rebase-cousins to rebase-cousins; I was mistaken. However, Glen thinks that in the future we might have some kind of rebase-evil-merges mode as well, and that that might become the default. If we don't let the rebase.rebaseMerges config value control the default behavior of --rebase-merges without an argument on the command line, we would have to introduce a separate config option for the transition, which would be ugly.

More voices would be helpful here. Does anyone else have an opinion on how likely it is that the default rebase-merges mode will change in the future? Or on whether rebase.rebaseMerges should be allowed to affect --rebase-merges in order to facilitate such a change?

Show 27 quoted lines
> >>> +test_expect_success '--rebase-merges overrides rebase.merges=false' '
> >>> +     test_config rebase.merges false &&
> >>> +     git checkout -b override-config-merges-false E &&
> >>> +     before="$(git rev-parse --verify HEAD)" &&
> >>> +     test_tick &&
> >>> +     git rebase --rebase-merges C &&
> >>> +     test_cmp_rev HEAD $before
> >>
> >> This test passes if the rebase does nothing, maybe pass --force and
> >> check the graph?
> >
> > The rebase is supposed to do nothing here.
>
> It's not doing nothing though - it is rebasing the branch, it just
> happens that everything fast-forwards so HEAD ends up unchanged. My
> point is that this test should verify the branch has been rebased. Maybe
> you could check the reflog message for HEAD@{0} is
>
>         rebase (finish): returning to refs/heads/override-config-merges-false
>
> > Checking that the commit
> > hash is the same is just a quick way to check that the entire graph is
> > the same. What more would be checked by checking the graph instead of
> > the hash?
>
> By using --force and checking the graph you check that the rebase
> actually happened.

I got the impression that people like that not checking the graph itself (or the reflog) makes the tests more concise, but I don't care much either way. For what it's worth, the way I did it matches the existing tests in the file. If you can find at least one other person who thinks that it ought to change for this patch series to be accepted, and no one else objects, I'll change it.

> Thanks for working on this
You're welcome; hopefully we can get the remaining details ironed out quickly.
-Alex
Previous: Phillip WoodNext: Phillip Wood
Message 35 of 96 in “rebase: add documentation and test for --no-rebase-merges”
  1. 1/3 rebase: add documentation and test for --no-rebase-mergesAlex Henrie, Feb 23, 2023
  2. 2/3 rebase: stop accepting --rebase-merges=""Alex Henrie, Feb 23, 2023
  3. Johannes SchindelinFeb 24, 2023
  4. Junio C HamanoFeb 24, 2023
  5. Alex HenrieFeb 24, 2023
  6. Junio C HamanoFeb 24, 2023
  7. Alex HenrieFeb 24, 2023
  8. Junio C HamanoFeb 24, 2023
  9. Alex HenrieFeb 24, 2023
  10. Junio C HamanoFeb 24, 2023
  11. Alex HenrieFeb 24, 2023
  12. Phillip WoodFeb 24, 2023
  13. Alex HenrieFeb 24, 2023
  14. 3/3 rebase: add a config option for --rebase-mergesAlex Henrie, Feb 23, 2023
  15. Johannes SchindelinFeb 24, 2023
  16. Alex HenrieFeb 24, 2023
  17. Phillip WoodFeb 24, 2023
  18. Alex HenrieFeb 24, 2023
  19. Junio C HamanoFeb 23, 2023
  20. Johannes SchindelinFeb 24, 2023
  21. Junio C HamanoFeb 24, 2023
  22. Alex HenrieFeb 25, 2023
  23. 0/3 rebase: add a config option for --rebase-mergesAlex Henrie, Feb 25, 2023
  24. 1/3 rebase: add documentation and test for --no-rebase-mergesAlex Henrie, Feb 25, 2023
  25. Glen ChooMar 1, 2023
  26. 2/3 rebase: deprecate --rebase-merges=""Alex Henrie, Feb 25, 2023
  27. Glen ChooMar 1, 2023
  28. Phillip WoodMar 2, 2023
  29. Calvin WanMar 2, 2023
  30. 3/3 rebase: add a config option for --rebase-mergesAlex Henrie, Feb 25, 2023
  31. Glen ChooMar 1, 2023
  32. Phillip WoodMar 2, 2023
  33. Alex HenrieMar 4, 2023
  34. Phillip WoodMar 7, 2023
  35. Alex HenrieMar 12, 2023
  36. Phillip WoodMar 13, 2023
  37. Felipe ContrerasMar 13, 2023
  38. Junio C HamanoMar 13, 2023
  39. About replaying "evil" merges... Re: [PATCH v5 3/3] rebase: add a config option for --rebase-mergesJohannes Schindelin, Mar 24, 2023
  40. Calvin WanMar 2, 2023
  41. Alex HenrieMar 4, 2023
  42. Glen ChooMar 1, 2023
  43. Alex HenrieMar 2, 2023
  44. Alex HenrieMar 2, 2023
  45. 0/3 rebase: document, clean up, and introduce a config option for --rebase-mergesAlex Henrie, Mar 5, 2023
  46. 3/3 rebase: add a config option for --rebase-mergesAlex Henrie, Mar 5, 2023
  47. Phillip WoodMar 7, 2023
  48. Junio C HamanoMar 7, 2023
  49. Alex HenrieMar 12, 2023
  50. Glen ChooMar 8, 2023
  51. Glen ChooMar 8, 2023
  52. Alex HenrieMar 12, 2023
  53. Alex HenrieMar 15, 2023
  54. Glen ChooMar 16, 2023
  55. Felipe ContrerasMar 16, 2023
  56. Glen ChooMar 16, 2023
  57. Felipe ContrerasMar 16, 2023
  58. Alex HenrieMar 16, 2023
  59. Glen ChooMar 16, 2023
  60. Alex HenrieMar 18, 2023
  61. Johannes SchindelinMar 24, 2023
  62. Sergey OrganovMar 25, 2023
  63. 1/3 rebase: add documentation and test for --no-rebase-mergesAlex Henrie, Mar 5, 2023
  64. Sergey OrganovMar 8, 2023
  65. 2/3 rebase: deprecate --rebase-merges=""Alex Henrie, Mar 5, 2023
  66. Phillip WoodMar 7, 2023
  67. Sergey OrganovMar 5, 2023
  68. Alex HenrieMar 5, 2023
  69. Sergey OrganovMar 5, 2023
  70. Alex HenrieMar 6, 2023
  71. Sergey OrganovMar 6, 2023
  72. Junio C HamanoMar 6, 2023
  73. Junio C HamanoMar 6, 2023
  74. Phillip WoodMar 6, 2023
  75. Alex HenrieMar 6, 2023
  76. Phillip WoodMar 7, 2023
  77. Glen ChooMar 8, 2023
  78. 0/3 rebase: document, clean up, and introduce a config option for --rebase-mergesAlex Henrie, Mar 12, 2023
  79. 1/3 rebase: add documentation and test for --no-rebase-mergesAlex Henrie, Mar 12, 2023
  80. 2/3 rebase: deprecate --rebase-merges=""Alex Henrie, Mar 12, 2023
  81. 3/3 rebase: add a config option for --rebase-mergesAlex Henrie, Mar 12, 2023
  82. 0/3 rebase: document, clean up, and introduce a config option for --rebase-mergesAlex Henrie, Mar 20, 2023
  83. 1/3 rebase: add documentation and test for --no-rebase-mergesAlex Henrie, Mar 20, 2023
  84. 2/3 rebase: deprecate --rebase-merges=""Alex Henrie, Mar 20, 2023
  85. 3/3 rebase: add a config option for --rebase-mergesAlex Henrie, Mar 20, 2023
  86. Phillip WoodMar 22, 2023
  87. Junio C HamanoMar 23, 2023
  88. Phillip WoodMar 24, 2023
  89. Alex HenrieMar 25, 2023
  90. Alex HenrieMar 25, 2023
  91. 0/3 rebase: document, clean up, and introduce a config option for --rebase-mergesAlex Henrie, Mar 26, 2023
  92. 1/3 rebase: add documentation and test for --no-rebase-mergesAlex Henrie, Mar 26, 2023
  93. 2/3 rebase: deprecate --rebase-merges=""Alex Henrie, Mar 26, 2023
  94. 3/3 rebase: add a config option for --rebase-mergesAlex Henrie, Mar 26, 2023
  95. Phillip WoodMar 26, 2023
  96. Junio C HamanoMar 27, 2023

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.