From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: Marc C <marc@mccd.space>
Cc: git@vger.kernel.org
Subject: Re: Git pre-received hook not failing with exit code 1 correcly
Date: Sun, 21 Jan 2024 18:05:53 +0000 [thread overview]
Message-ID: <Za1dAaKO_IlT3nuM@tapette.crustytoothpaste.net> (raw)
In-Reply-To: <CYK0FIQPVI22.2RHKOY4L00FZS@mccd.space>
[-- Attachment #1: Type: text/plain, Size: 1976 bytes --]
On 2024-01-21 at 01:57:28, Marc C wrote:
> Heya!
Hey,
> I am trying to understand why my pre-publish hook does not exit with the
> correct status code.
>
> I have a pre-publish script
>
> ```
> #!/bin/sh
> set -euo pipefail
One note about this is that `-o pipefail` is a bash- and zsh-specific
option. (It's also present in some ksh variants.) It isn't specified
by POSIX, so you'd probably want to use `#!/bin/bash` as your shebang
instead.
Even OSes such as Debian which specify certain extensions required for
`/bin/sh` (notably `local`) don't require this of it.
> However, when running the script as a pre-receive hook, it is not
> running the commands correctly and returns the wrong exit code. I get
> the following:
>
> ```
> remote: Testing nixos config
> remote: building the system configuration...
> remote: Success <-- ????
> remote: error:
> remote: … while calling the 'seq' builtin
> ...
> To myserver:/myrepo
> bffa94e..a14b3f6 main -> main
> ```
>
> Any clue what I am missing? When running it as a pre-receive hook, the
> failing command returns exit code 0. Running it in the CLI, it returns
> exit code 1. It is Schrodinger's exit code.
I know nothing about nixOS, but I'm wondering if maybe `nixos-rebuild
dry-build` forks in some cases, specifically when it's detached from the
terminal. If that happened, then you'd see the above, where the child
process continued but the parent process exited, and then the error
message would get printed at the end.
You'd also see this if you had an `&` at the end of `nixos-rebuild
dry-build`, but you don't seem to have that here.
You could try something like `(cat | ./.git/hooks/pre-receive 2>&1 | cat)`
to see if the problem is the lack of terminal.
Hopefully that gives you a helpful head start on the problem. I
apologize for not being able to help more.
--
brian m. carlson (he/him or they/them)
Toronto, Ontario, CA
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
prev parent reply other threads:[~2024-01-21 18:06 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-21 1:57 Git pre-received hook not failing with exit code 1 correcly Marc C
2024-01-21 18:05 ` brian m. carlson [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Za1dAaKO_IlT3nuM@tapette.crustytoothpaste.net \
--to=sandals@crustytoothpaste.net \
--cc=git@vger.kernel.org \
--cc=marc@mccd.space \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox