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

Re: [PATCH 0/2] replay: die descriptively when invalid commit-ish

From
Elijah Newren <newren@gmail.com>
Date
Dec 24, 2025, 03:03 UTC
Message-ID
<CABPp-BEcJqjD4ztsZo2FTZgWT5ZOADKYEyiZtda+d0mSd1quPQ@mail.gmail.com>
In-Reply-To
<CV_replay_die_descr.13f@msgid.xyz>
On Mon, Dec 22, 2025 at 2:04 PM <kristofferhaugsbakk@fastmail.com> wrote:
Show 20 quoted lines
>
> From: Kristoffer Haugsbakk <code@khaugsbakk.name>
>
> You get this error when you for example mistype the argument to
> `--onto`:
>
>     fatal: Replaying down to root commit is not supported yet!
>
> Consider that you might not know yourself that you have mistyped
> something; then this looks even more puzzling. You might have given a
> range like `main..topic` but the command says that it would need to
> replay down to the root commit.
>
> The only thing that’s happened though is that `NULL` has been
> interpreted in the wrong way.
>
> Let’s instead die immediately when the real error happens, in other
> words when we can’t find the commit for the given commit-ish.
>
> Also add more regression tests.

Thanks for working on this. I have nothing to add beyond what others have already commented on the series, except that I can maybe answer one question...

Show 25 quoted lines
> Somewhat unrelated to this change—and caveat not a C programmer—I was
> confused by `determine_replay_mode`.  Most of the function deals with
> three cases:
>
>     if (onto_name) {
>     ...
>     } else if (*advance_name) {
>     ...
>     } else {
>     ...
>     }
>
> But I don’t get the `else` since you now need to provide either `--onto`
> or `--advance`.  And both require an argument.  So when can the
> fallthrough `else` happen?
>
> I thought that maybe the `else` was old code that predated `--onto` and
> `--advance` being mandatory. But that whole method and this check was
> added in the same commit, in 22d99f01 (replay: add --advance or
> 'cherry-pick' mode, 2023-11-24):
>
>     if (!onto_name && !advance_name) {
>             error(_("option --onto or --advance is mandatory"));
>
> But just ignore this section if I’m simply confused.

Your assumption was right -- that the final `else` was old code that predated `--onto` and `--advance` being mandatory. git-replay was originally developed in my private branch, but I let other folks know I was experimenting with it. When life pulled me away from git, Christian and Johannes expressed interest in the command, and Christian cleaned up my rough patches, stripping out the clearly half-baked stuff, and also removing some additional things that didn't need to be in the initial version, and sent it upstream. None of us noticed this `else` had turned into dead code in the review.

The original had the idea that it would be able to sometimes guess the mode and allow for shorter command lines, but I was still playing around with it and haven't particularly felt the need to push that idea.

Even if we eventually decide we want that other handling, removing this `else` clause for now and allowing it to be reintroduced later would probably make for a more coherent patch anyway.

Previous: Kristoffer HaugsbakkNext: Kristoffer Haugsbakk
Message 12 of 35 in “replay: die descriptively when invalid commit-ish”
  1. 0/2 replay: die descriptively when invalid commit-ishkristofferhaugsbakk@fastmail.com, Dec 22, 2025
  2. 1/2 replay: die descriptively when invalid commit-ishkristofferhaugsbakk@fastmail.com, Dec 22, 2025
  3. Junio C HamanoDec 23, 2025
  4. Phillip WoodDec 23, 2025
  5. Junio C HamanoDec 23, 2025
  6. Kristoffer HaugsbakkDec 30, 2025
  7. 2/2 t3650: add more regression tests for failure conditionskristofferhaugsbakk@fastmail.com, Dec 22, 2025
  8. Phillip WoodDec 23, 2025
  9. Kristoffer HaugsbakkDec 30, 2025
  10. Junio C HamanoDec 23, 2025
  11. Kristoffer HaugsbakkDec 30, 2025
  12. Elijah NewrenDec 24, 2025
  13. Kristoffer HaugsbakkDec 30, 2025
  14. 0/5 replay: die descriptively when invalid commit-ishkristofferhaugsbakk@fastmail.com, Dec 30, 2025
  15. 1/5 replay: remove dead code and rearrangekristofferhaugsbakk@fastmail.com, Dec 30, 2025
  16. Elijah NewrenDec 30, 2025
  17. Junio C HamanoDec 30, 2025
  18. Kristoffer HaugsbakkJan 2, 2026
  19. 2/5 replay: find *onto only after testing for ref namekristofferhaugsbakk@fastmail.com, Dec 30, 2025
  20. Elijah NewrenDec 30, 2025
  21. 3/5 replay: die descriptively when invalid commit-ish is givenkristofferhaugsbakk@fastmail.com, Dec 30, 2025
  22. Elijah NewrenDec 30, 2025
  23. Kristoffer HaugsbakkJan 2, 2026
  24. 4/5 replay: die if we cannot parse objectkristofferhaugsbakk@fastmail.com, Dec 30, 2025
  25. 5/5 t3650: add more regression tests for failure conditionskristofferhaugsbakk@fastmail.com, Dec 30, 2025
  26. Elijah NewrenDec 30, 2025
  27. 0/6 replay: die descriptively when invalid commit-ishkristofferhaugsbakk@fastmail.com, Jan 5, 2026
  28. 1/6 replay: remove dead code and rearrangekristofferhaugsbakk@fastmail.com, Jan 5, 2026
  29. 2/6 replay: find *onto only after testing for ref namekristofferhaugsbakk@fastmail.com, Jan 5, 2026
  30. 3/6 replay: die descriptively when invalid commit-ish is givenkristofferhaugsbakk@fastmail.com, Jan 5, 2026
  31. 4/6 replay: improve code comment and die messagekristofferhaugsbakk@fastmail.com, Jan 5, 2026
  32. 5/6 replay: die if we cannot parse objectkristofferhaugsbakk@fastmail.com, Jan 5, 2026
  33. 6/6 t3650: add more regression tests for failure conditionskristofferhaugsbakk@fastmail.com, Jan 5, 2026
  34. Elijah NewrenJan 6, 2026
  35. Junio C HamanoJan 7, 2026

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.