Re: [PATCH] Make http-backend REMOTE_USER configurable
On Thu, Mar 29, 2012 at 06:22:30PM -0400, Jeff King wrote:
Show 7 quoted lines
> I think an even better thing would be for http-backend to leave
> GIT_COMMITTER_* alone if it exists; that is the usual well-known
> interface for setting such things. And then you could specify a
> detailed committer name and email if you want, or leave them blank to
> pull from $REMOTE_USER as we do now. As it is now, even if you specify
> GIT_COMMITTER_EMAIL, it gets overwritten with
> "$REMOTE_USER@http.$REMOTE_ADDR".
That patch would look something like this:
---
diff --git a/http-backend.c b/http-backend.c
index 869d515..aa892e6 100644
--- a/http-backend.c
+++ b/http-backend.c
@@ -318,7 +318,7 @@ static void run_service(const char **argv)
const char *user = getenv("REMOTE_USER");
const char *host = getenv("REMOTE_ADDR");
char *env[3];
- struct strbuf buf = STRBUF_INIT;
+ int num_env = 0;
int gzipped_request = 0;
struct child_process cld;
@@ -332,13 +332,17 @@ static void run_service(const char **argv)
if (!host || !*host)
host = "(none)";
- memset(&env, 0, sizeof(env));
- strbuf_addf(&buf, "GIT_COMMITTER_NAME=%s", user);
- env[0] = strbuf_detach(&buf, NULL);
-
- strbuf_addf(&buf, "GIT_COMMITTER_EMAIL=%s@http.%s", user, host);
- env[1] = strbuf_detach(&buf, NULL);
- env[2] = NULL;
+ if (!getenv("GIT_COMMITTER_NAME")) {
+ struct strbuf buf = STRBUF_INIT;
+ strbuf_addf(&buf, "GIT_COMMITTER_NAME=%s", user);
+ env[num_env++] = strbuf_detach(&buf, NULL);
+ }
+ if (!getenv("GIT_COMMITTER_EMAIL")) {
+ struct strbuf buf = STRBUF_INIT;
+ strbuf_addf(&buf, "GIT_COMMITTER_EMAIL=%s@http.%s", user, host);
+ env[num_env++] = strbuf_detach(&buf, NULL);
+ }
+ env[num_env] = NULL;
memset(&cld, 0, sizeof(cld));
cld.argv = argv;
@@ -359,7 +363,6 @@ static void run_service(const char **argv)
exit(1);
free(env[0]);
free(env[1]);
- strbuf_release(&buf);
}
static int show_text_ref(const char *name, const unsigned char *sha1,