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

Re: [PATCH v4 4/8] am, rebase--merge: do not overlook --skip'ed commits with post-rewrite

From
Elijah Newren <newren@gmail.com>
Date
Jan 21, 2019, 17:59 UTC
Message-ID
<CABPp-BGOPQms5CRvQ_+iMs=8-tgvw=cyJaT1OCKNFHEG+GyAvA@mail.gmail.com>
In-Reply-To
<nycvar.QRO.7.76.6.1901211706250.41@tvgsbejvaqbjf.bet>
Hi Dscho,

On Mon, Jan 21, 2019 at 8:07 AM Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:

Show 41 quoted lines
>
> Hi,
>
> On Tue, 11 Dec 2018, Elijah Newren wrote:
>
> > The post-rewrite hook is supposed to be invoked for each rewritten
> > commit.  The fact that a commit was selected and processed by the rebase
> > operation (even though when we hit an error a user said it had no more
> > useful changes), suggests we should write an entry for it.  In
> > particular, let's treat it as an empty commit trivially squashed into
> > its parent.
> >
> > This brings the rebase--am and rebase--merge backends in sync with the
> > behavior of the interactive rebase backend.
> >
> > Signed-off-by: Elijah Newren <newren@gmail.com>
>
> This makes sense. I think, though, that we need to be more careful...
>
> > ---
> >  builtin/am.c                 | 9 +++++++++
> >  git-rebase--merge.sh         | 2 ++
> >  t/t5407-post-rewrite-hook.sh | 3 +++
> >  3 files changed, 14 insertions(+)
> >
> > diff --git a/builtin/am.c b/builtin/am.c
> > index 8f27f3375b..af9d034838 100644
> > --- a/builtin/am.c
> > +++ b/builtin/am.c
> > @@ -2000,6 +2000,15 @@ static void am_skip(struct am_state *state)
> >       if (clean_index(&head, &head))
> >               die(_("failed to clean index"));
> >
> > +     if (state->rebasing) {
> > +             FILE *fp = xfopen(am_path(state, "rewritten"), "a");
> > +
> > +             assert(!is_null_oid(&state->orig_commit));
> > +             fprintf(fp, "%s ", oid_to_hex(&state->orig_commit));
>
> ... here. What if `fp == NULL`? (Users do all kinds of interesting
> things...)

This if-block is actually copy-pasted from the end of the do_commit() function, since the same logic was needed in both places. The fact that a `fp == NULL` case never triggered for do_commit() suggests that the check has never been needed in the wild (or perhaps it just indicates a latent bug that no one has triggered yet). However, it does suggest a code cleanup regardless. I thought of it as such a small block that I didn't think to put it in a separate function, but perhaps I should so that someone spotting the possibility of a NULL fp could fix it for both callers in a single place.

Should I insert a preliminary change pulling this block out of do_commit into a separate function, and then modify this patch to just call this function? Or perhaps given the length of time it has already been cooking (and Junio's rerere resolution of our two series that I don't want to mess up), just do it as a simple post-series fixup?

Elijah
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 29 of 67 in “Reimplement rebase --merge via interactive machinery”
  1. 0/2 Reimplement rebase --merge via interactive machineryElijah Newren, Nov 8, 2018
  2. 1/2 git-rebase, sequencer: extend --quiet option for the interactive machineryElijah Newren, Nov 8, 2018
  3. Johannes SchindelinNov 12, 2018
  4. 2/2 rebase: Implement --merge via git-rebase--interactiveElijah Newren, Nov 8, 2018
  5. Johannes SchindelinNov 12, 2018
  6. Phillip WoodNov 12, 2018
  7. Johannes SchindelinNov 13, 2018
  8. Elijah NewrenNov 14, 2018
  9. Elijah NewrenNov 13, 2018
  10. Elijah NewrenNov 14, 2018
  11. Johannes SchindelinNov 15, 2018
  12. Elijah NewrenNov 8, 2018
  13. 0/7 Reimplement rebase --merge via interactive machineryElijah Newren, Nov 22, 2018
  14. 4/7 git-rebase, sequencer: extend --quiet option for the interactive machineryElijah Newren, Nov 22, 2018
  15. 2/7 t5407: add a test demonstrating how interactive handles --skip differentlyElijah Newren, Nov 22, 2018
  16. 1/7 rebase: fix incompatible options error messageElijah Newren, Nov 22, 2018
  17. Johannes SchindelinNov 28, 2018
  18. Elijah NewrenNov 28, 2018
  19. Duy NguyenNov 28, 2018
  20. Elijah NewrenNov 28, 2018
  21. 7/7 rebase: Implement --merge via the interactive machineryElijah Newren, Nov 22, 2018
  22. 5/7 git-legacy-rebase: simplify unnecessary triply-nested ifElijah Newren, Nov 22, 2018
  23. 3/7 am, rebase--merge: do not overlook --skip'ed commits with post-rewriteElijah Newren, Nov 22, 2018
  24. 6/7 rebase: define linearization ordering and enforce itElijah Newren, Nov 22, 2018
  25. 0/8 Reimplement rebase --merge via interactive machineryElijah Newren, Dec 11, 2018
  26. 1/8 rebase: make builtin and legacy script error messages the sameElijah Newren, Dec 11, 2018
  27. 4/8 am, rebase--merge: do not overlook --skip'ed commits with post-rewriteElijah Newren, Dec 11, 2018
  28. Johannes SchindelinJan 21, 2019
  29. Elijah NewrenJan 21, 2019
  30. Johannes SchindelinJan 21, 2019
  31. 2/8 rebase: fix incompatible options error messageElijah Newren, Dec 11, 2018
  32. 6/8 git-legacy-rebase: simplify unnecessary triply-nested ifElijah Newren, Dec 11, 2018
  33. 8/8 rebase: Implement --merge via the interactive machineryElijah Newren, Dec 11, 2018
  34. 5/8 git-rebase, sequencer: extend --quiet option for the interactive machineryElijah Newren, Dec 11, 2018
  35. Johannes SchindelinJan 21, 2019
  36. Elijah NewrenJan 21, 2019
  37. Johannes SchindelinJan 21, 2019
  38. Johannes SchindelinJan 21, 2019
  39. Junio C HamanoJan 22, 2019
  40. Phillip WoodFeb 20, 2019
  41. Elijah NewrenFeb 21, 2019
  42. 7/8 rebase: define linearization ordering and enforce itElijah Newren, Dec 11, 2018
  43. 3/8 t5407: add a test demonstrating how interactive handles --skip differentlyElijah Newren, Dec 11, 2018
  44. Elijah NewrenJan 7, 2019
  45. Junio C HamanoJan 7, 2019
  46. Junio C HamanoJan 7, 2019
  47. Elijah NewrenJan 7, 2019
  48. Elijah NewrenJan 11, 2019
  49. Johannes SchindelinJan 18, 2019
  50. Johannes SchindelinJan 18, 2019
  51. Junio C HamanoJan 18, 2019
  52. Elijah NewrenJan 18, 2019
  53. Johannes SchindelinJan 18, 2019
  54. Junio C HamanoJan 18, 2019
  55. Johannes SchindelinJan 21, 2019
  56. Johannes SchindelinJan 21, 2019
  57. Johannes SchindelinJan 21, 2019
  58. Elijah NewrenJan 21, 2019
  59. 0/8 Reimplement rebase --merge via interactive machineryElijah Newren, Jan 29, 2019
  60. 1/8 rebase: make builtin and legacy script error messages the sameElijah Newren, Jan 29, 2019
  61. 6/8 git-legacy-rebase: simplify unnecessary triply-nested ifElijah Newren, Jan 29, 2019
  62. 4/8 am, rebase--merge: do not overlook --skip'ed commits with post-rewriteElijah Newren, Jan 29, 2019
  63. 8/8 rebase: implement --merge via the interactive machineryElijah Newren, Jan 29, 2019
  64. 5/8 git-rebase, sequencer: extend --quiet option for the interactive machineryElijah Newren, Jan 29, 2019
  65. 7/8 rebase: define linearization ordering and enforce itElijah Newren, Jan 29, 2019
  66. 2/8 rebase: fix incompatible options error messageElijah Newren, Jan 29, 2019
  67. 3/8 t5407: add a test demonstrating how interactive handles --skip differentlyElijah Newren, Jan 29, 2019

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.