[PATCH 0/2] replay: die descriptively when invalid commit-ish
- From
- kristofferhaugsbakk@fastmail.com <kristofferhaugsbakk@fastmail.com>
- Date
- Dec 22, 2025, 22:04 UTC
- Message-ID
- <CV_replay_die_descr.13f@msgid.xyz>
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.
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.
Kristoffer Haugsbakk (2): replay: die descriptively when invalid commit-ish t3650: add more regression tests for failure conditions
builtin/replay.c | 2 +- t/t3650-replay-basics.sh | 43 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-)
base-commit: 9a2fb147f2c61d0cab52c883e7e26f5b7948e3ed
-- 2.52.0.10.g08704017180