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

Re: [Leftoverbits] exit code clean-up?

From
Jeff King <peff@peff.net>
Date
Aug 17, 2023, 05:36 UTC
Message-ID
<20230817053627.GC3006160@coredump.intra.peff.net>
In-Reply-To
<xmqqsf8iex5v.fsf_-_@gitster.g>
On Wed, Aug 16, 2023 at 10:04:28AM -0700, Junio C Hamano wrote:
Show 16 quoted lines
> We could either
> 
>  * Be more prescriptive and add "EXIT CODES" section to each and
>    every document to describe how we fail in the current code.
> 
> or
> 
>  * Describe "In general, 0 is success, non-zero is failure, but some
>    commands may signal more than that with its non-zero exit codes"
>    in "git help git", and add "EXIT CODES" section to the manual
>    page of the commands whose exit codes matter (there are a
>    handful, like "git diff --exit-code" that explicitly says "1" is
>    the signal that it found difference as opposed to it failing).
> 
> I'd prefer if community agrees that we should do the latter, but I
> am OK if the community consensus goes the other way.

I left some notes on upload-pack specifically elsewhere in the thread, in which I argue that we should definitely not lock ourselves into its current behavior.

But in the more general sense, yeah, I think that trying to document specific exit codes for each command is a mistake. It is not just "let's find which exit codes they use and document them". I suspect it is a rat's nest of unplanned behaviors that come from unexpected die() calls deep in the stack. We would not necessarily want to make promises about what is happening in those, nor do I think it would even be sensible to find every possible exit.

We _could_ document "128 means something really unexpected happened and we called die() deep in the code". But even that seems misleading to me, as we also die() for everyday shallow things (like "the name you gave is not valid"). The value really means very little in practice, and the biggest reason not to change it is that we know it doesn't conflict with any codes that programs _do_ promise are meaningful (like "1" from "diff --exit-code").

So saying "0 is success, non-zero is failure, and some commands may document specific codes" is the closest thing to the reality of what we as developers know and have planned. (Of course another project is not just to figure out the possible situations/codes but to catalogue and organize them. But that seems like an order of magnitude more work, if not several orders).

-Peff
Previous: Junio C HamanoNext: Junio C Hamano
Message 8 of 12 in “upload-pack: fix race condition in error messages”
  1. upload-pack: fix race condition in error messagesDerrick Stolee via GitGitGadget, Aug 10, 2023
  2. Junio C HamanoAug 10, 2023
  3. upload-pack: fix exit code when denying fetch of unreachable object IDPatrick Steinhardt, Aug 16, 2023
  4. Junio C HamanoAug 16, 2023
  5. Junio C HamanoAug 16, 2023
  6. Jeff KingAug 17, 2023
  7. [Leftoverbits] exit code clean-up?Junio C Hamano, Aug 16, 2023
  8. Jeff KingAug 17, 2023
  9. Junio C HamanoAug 17, 2023
  10. Oswald BuddenhagenAug 17, 2023
  11. Junio C HamanoAug 17, 2023
  12. Patrick SteinhardtAug 17, 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.