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

Re: What are cherry-pick's exit codes?

From
Sean Allred <allred.sean@gmail.com>
Date
Dec 1, 2022, 13:38 UTC
Message-ID
<87zgc7w811.fsf@gmail.com>
In-Reply-To
<221201.86zgc7gv4x.gmgdl@evledraar.gmail.com>
Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
Show 10 quoted lines
> In general I think you'd do well to follow the template of what I did in
> 9144ba4cf52 (remote: add meaningful exit code on missing/existing,
> 2020-10-27).
>
> In particular, I don't think we should exhaustively document exit codes
> for a given command, as we really have a hard time controlling all the
> possible values.
>
> Rather, we should define specific non-zero values as having specific
> meanings, as I did with "git remote" in that commit.

Definitely agree (this is roughly what I've had in my WIP patch), and I'm glad to see precedent for an explicit 'exit status' section.

> We'd also ideally leave "exit(1)" alone, and if we need to disambiguate
> it start with "exit(2)", but maybe it's easy to make it unambiguous in
> this case, or it's already unambiguous...

I'm not 100% sure what you mean here, though. Do you mean that if something returns an exit code of '1', we shouldn't touch it without more specific review since it's more likely someone will be depending on that value?

I think in my case, at least for what I see right now, the more urgent need is getting exit codes documented -- but I can see where doing so might create a situation where we can't improve the exit codes in the future -- thus implying that the 'improving' and the 'documenting' may need to be done in one go.

Show 15 quoted lines
>>   - 127: fatal -- lots of reasons -- I'm guessing this is value for the
>>     'return -1' and 'return error(...)' statements speckled throughout
>>     the code, but it's been a long time since I cared about two's
>>     complement so I may be wrong here.
>
> If it's "return -1" you generally end up with 255 in your shell,
> although that's unportable both for the C language, and for POSIX.
>
> See 19d75948ef7 (common-main.c: move non-trace2 exit() behavior out of
> trace2.c, 2022-06-02) for some code dealing with that (where we fake up
> the -1 to 255, for logging).
>
> But from looking at cmd_cherry_pick() we catch any <0 return values and
> die() on them, but maybe we exit() elsewhere? Do you have an example of
> these.

No, I don't think so -- at least not by the point we hit 'run_git_command()'.

Show 17 quoted lines
>>   - 128: fatal -- sequence is interrupted, possibly due to some other
>>     fatal error, e.g., 'commit doesn't exist' or 'mainline parent number
>>     doesn't exist'
>>
>>   - 129: fatal -- there was nothing to cherry-pick at all (e.g. empty
>>     range)
>
> I think as in 9144ba4cf52 (remote: add meaningful exit code on
> missing/existing, 2020-10-27) it's good to just leave these
> undocumented.
>
> We typically return these when we invoke die() or usage_with_options()
> (or similar).
>
> So, if we are documenting them (which would be a good change, as an
> aside) that probably belongs in gitcli(7), we could then reference that
> from other man pages.

Ah, gitcli(7) makes sense for these statuses. I'll see about submitting a patch for review later tonight / this week; I'm cautiously optimistic that it will be straightforward.

>>   2. If not, is the above listing the exit codes accurate and complete?
>
> I don't know, but skimming the code I don't see the "return 1", unless
> by the above " - 1" you mean "minus one", i.e. 255.
I do indeed mean 'negative one'.
> I.e. cmd_cherry_pick() calls run_sequencer(), which on error seems to
> return -1 for most things, which we then coerce to that die().
>
> But I haven't looked in much detail, so...

Seems like I (or someone) has some pretty 'fun' code tracing in my future...

What's the next step here? Submit a patch with my best effort and suss out the problems during review?

-- Sean Allred

Previous: Ævar Arnfjörð BjarmasonNext: Phillip Wood
Message 3 of 5 in “What are cherry-pick's exit codes?”
  1. Sean AllredDec 1, 2022
  2. Ævar Arnfjörð BjarmasonDec 1, 2022
  3. Sean AllredDec 1, 2022
  4. Phillip WoodDec 1, 2022
  5. Sean AllredDec 1, 2022

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.