summaryrefslogtreecommitdiff
path: root/overlays/git-fix
diff options
context:
space:
mode:
Diffstat (limited to 'overlays/git-fix')
-rw-r--r--overlays/git-fix/0001-http-backend-write-newlines-to-stderr-when-respondin.patch54
-rw-r--r--overlays/git-fix/default.nix7
2 files changed, 61 insertions, 0 deletions
diff --git a/overlays/git-fix/0001-http-backend-write-newlines-to-stderr-when-respondin.patch b/overlays/git-fix/0001-http-backend-write-newlines-to-stderr-when-respondin.patch
new file mode 100644
index 0000000..9aa9687
--- /dev/null
+++ b/overlays/git-fix/0001-http-backend-write-newlines-to-stderr-when-respondin.patch
@@ -0,0 +1,54 @@
+From fa18fa7967333ccde36f9347722a66f44b746f25 Mon Sep 17 00:00:00 2001
+From: KJ Tsanaktsidis <kjtsanaktsidis@groq.com>
+Date: Thu, 8 Jan 2026 02:52:48 -0800
+Subject: [PATCH] http-backend: write newlines to stderr when responding with
+ errors
+
+The not_found and forbidden methods currently do not write a newline to
+stderr after the error message. This means that if git-http-backend is
+invoked through something like fcgiwrap, and the stderr of that fcgiwrap
+process is sent to a logging daemon (e.g. journald), the error messages
+of several git-http-backend invocations will just get strung together,
+e.g.
+
+> Not a git repository: '/var/lib/git/foo.git'Not a git repository: '/var/lib/git/foo.git'Not a git repository: '/var/lib/git/foo.git'
+
+I think it's git-http-backend's responsibility to format these messages
+properly, rather than it being fcgiwrap's job to notice that the script
+didn't terminate stderr with a newline and do so itself.
+
+Signed-off-by: KJ Tsanaktsidis <kj@kjtsanaktsidis.id.au>
+---
+ http-backend.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/http-backend.c b/http-backend.c
+index 52f0483dd3..bda8bb91e1 100644
+--- a/http-backend.c
++++ b/http-backend.c
+@@ -143,8 +143,10 @@ static NORETURN void not_found(struct strbuf *hdr, const char *err, ...)
+ end_headers(hdr);
+
+ va_start(params, err);
+- if (err && *err)
++ if (err && *err) {
+ vfprintf(stderr, err, params);
++ fprintf(stderr, "\n");
++ }
+ va_end(params);
+ exit(0);
+ }
+@@ -159,8 +161,10 @@ static NORETURN void forbidden(struct strbuf *hdr, const char *err, ...)
+ end_headers(hdr);
+
+ va_start(params, err);
+- if (err && *err)
++ if (err && *err) {
+ vfprintf(stderr, err, params);
++ fprintf(stderr, "\n");
++ }
+ va_end(params);
+ exit(0);
+ }
+--
+2.50.1
diff --git a/overlays/git-fix/default.nix b/overlays/git-fix/default.nix
new file mode 100644
index 0000000..808c55e
--- /dev/null
+++ b/overlays/git-fix/default.nix
@@ -0,0 +1,7 @@
+final: prev: {
+ git = prev.git.overrideAttrs (old: {
+ patches = (old.patches or []) ++ [
+ ./0001-http-backend-write-newlines-to-stderr-when-respondin.patch
+ ];
+ });
+}