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.shmaint
						commit
						8cde60210d
					
				|  | @ -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 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano