Merge branch 'jk/http-backend-keep-committer-ident-env' into maint
By Jeff King * jk/http-backend-keep-committer-ident-env: http-backend: respect existing GIT_COMMITTER_* variables Conflicts: t/t5541-http-push.sh
This commit is contained in:
		@ -7,6 +7,7 @@
 | 
			
		||||
#include "run-command.h"
 | 
			
		||||
#include "string-list.h"
 | 
			
		||||
#include "url.h"
 | 
			
		||||
#include "argv-array.h"
 | 
			
		||||
 | 
			
		||||
static const char content_type[] = "Content-Type";
 | 
			
		||||
static const char content_length[] = "Content-Length";
 | 
			
		||||
@ -317,8 +318,7 @@ static void run_service(const char **argv)
 | 
			
		||||
	const char *encoding = getenv("HTTP_CONTENT_ENCODING");
 | 
			
		||||
	const char *user = getenv("REMOTE_USER");
 | 
			
		||||
	const char *host = getenv("REMOTE_ADDR");
 | 
			
		||||
	char *env[3];
 | 
			
		||||
	struct strbuf buf = STRBUF_INIT;
 | 
			
		||||
	struct argv_array env = ARGV_ARRAY_INIT;
 | 
			
		||||
	int gzipped_request = 0;
 | 
			
		||||
	struct child_process cld;
 | 
			
		||||
 | 
			
		||||
@ -332,17 +332,15 @@ 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"))
 | 
			
		||||
		argv_array_pushf(&env, "GIT_COMMITTER_NAME=%s", user);
 | 
			
		||||
	if (!getenv("GIT_COMMITTER_EMAIL"))
 | 
			
		||||
		argv_array_pushf(&env, "GIT_COMMITTER_EMAIL=%s@http.%s",
 | 
			
		||||
				 user, host);
 | 
			
		||||
 | 
			
		||||
	memset(&cld, 0, sizeof(cld));
 | 
			
		||||
	cld.argv = argv;
 | 
			
		||||
	cld.env = (const char *const *)env;
 | 
			
		||||
	cld.env = env.argv;
 | 
			
		||||
	if (gzipped_request)
 | 
			
		||||
		cld.in = -1;
 | 
			
		||||
	cld.git_cmd = 1;
 | 
			
		||||
@ -357,9 +355,7 @@ static void run_service(const char **argv)
 | 
			
		||||
 | 
			
		||||
	if (finish_command(&cld))
 | 
			
		||||
		exit(1);
 | 
			
		||||
	free(env[0]);
 | 
			
		||||
	free(env[1]);
 | 
			
		||||
	strbuf_release(&buf);
 | 
			
		||||
	argv_array_clear(&env);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int show_text_ref(const char *name, const unsigned char *sha1,
 | 
			
		||||
 | 
			
		||||
@ -52,8 +52,15 @@ Alias /auth/ www/auth/
 | 
			
		||||
<Location /smart_noexport/>
 | 
			
		||||
	SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
 | 
			
		||||
</Location>
 | 
			
		||||
<Location /smart_custom_env/>
 | 
			
		||||
	SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
 | 
			
		||||
	SetEnv GIT_HTTP_EXPORT_ALL
 | 
			
		||||
	SetEnv GIT_COMMITTER_NAME "Custom User"
 | 
			
		||||
	SetEnv GIT_COMMITTER_EMAIL custom@example.com
 | 
			
		||||
</Location>
 | 
			
		||||
ScriptAlias /smart/ ${GIT_EXEC_PATH}/git-http-backend/
 | 
			
		||||
ScriptAlias /smart_noexport/ ${GIT_EXEC_PATH}/git-http-backend/
 | 
			
		||||
ScriptAlias /smart_custom_env/ ${GIT_EXEC_PATH}/git-http-backend/
 | 
			
		||||
<Directory ${GIT_EXEC_PATH}>
 | 
			
		||||
	Options None
 | 
			
		||||
</Directory>
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,7 @@ test_expect_success 'setup remote repository' '
 | 
			
		||||
	git clone --bare test_repo test_repo.git &&
 | 
			
		||||
	cd test_repo.git &&
 | 
			
		||||
	git config http.receivepack true &&
 | 
			
		||||
	git config core.logallrefupdates true &&
 | 
			
		||||
	ORIG_HEAD=$(git rev-parse --verify HEAD) &&
 | 
			
		||||
	cd - &&
 | 
			
		||||
	mv test_repo.git "$HTTPD_DOCUMENT_ROOT_PATH"
 | 
			
		||||
@ -245,5 +246,25 @@ test_expect_success 'push --progress shows progress to non-tty' '
 | 
			
		||||
	grep "^Writing objects" output
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
test_expect_success 'http push gives sane defaults to reflog' '
 | 
			
		||||
	cd "$ROOT_PATH"/test_repo_clone &&
 | 
			
		||||
	test_commit reflog-test &&
 | 
			
		||||
	git push "$HTTPD_URL"/smart/test_repo.git &&
 | 
			
		||||
	git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
 | 
			
		||||
		log -g -1 --format="%gn <%ge>" >actual &&
 | 
			
		||||
	echo "anonymous <anonymous@http.127.0.0.1>" >expect &&
 | 
			
		||||
	test_cmp expect actual
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
test_expect_success 'http push respects GIT_COMMITTER_* in reflog' '
 | 
			
		||||
	cd "$ROOT_PATH"/test_repo_clone &&
 | 
			
		||||
	test_commit custom-reflog-test &&
 | 
			
		||||
	git push "$HTTPD_URL"/smart_custom_env/test_repo.git &&
 | 
			
		||||
	git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
 | 
			
		||||
		log -g -1 --format="%gn <%ge>" >actual &&
 | 
			
		||||
	echo "Custom User <custom@example.com>" >expect &&
 | 
			
		||||
	test_cmp expect actual
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
stop_httpd
 | 
			
		||||
test_done
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user