diff --git a/pkt-line.c b/pkt-line.c index 893dd3c..295ba2b 100644 --- a/pkt-line.c +++ b/pkt-line.c @@ -124,14 +124,12 @@ static int packet_length(const char *linelen) int packet_read_line(int fd, char *buffer, unsigned size) { int len; - char linelen[5]; + char linelen[4]; safe_read(fd, linelen, 4); len = packet_length(linelen); - if (len < 0) { - linelen[4] = '\0'; - die("protocol error: bad line length character: %s", linelen); - } + if (len < 0) + die("protocol error: bad line length character: %.4s", linelen); if (!len) return 0; len -= 4; diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf index 2098ce0..0fe3fd0 100644 --- a/t/lib-httpd/apache.conf +++ b/t/lib-httpd/apache.conf @@ -8,20 +8,22 @@ ErrorLog error.log <IfModule !mod_log_config.c> LoadModule log_config_module modules/mod_log_config.so </IfModule> -<IfModule !mod_cgi.c> - LoadModule cgi_module modules/mod_cgi.so -</IfModule> <IfModule !mod_alias.c> LoadModule alias_module modules/mod_alias.so </IfModule> +<IfModule !mod_cgi.c> + LoadModule cgi_module modules/mod_cgi.so +</IfModule> <IfModule !mod_env.c> LoadModule env_module modules/mod_env.so </IfModule> -<Location /git/> +Alias /dumb/ www/ + +<Location /smart/> SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} </Location> -ScriptAlias /git/ ${GIT_EXEC_PATH}/git-http-backend/ +ScriptAlias /smart/ ${GIT_EXEC_PATH}/git-http-backend/ <Directory ${GIT_EXEC_PATH}> Options None </Directory> @@ -46,7 +48,7 @@ SSLEngine On LoadModule dav_fs_module modules/mod_dav_fs.so DAVLockDB DAVLock - <Location /> + <Location /dumb/> Dav on </Location> </IfDefine> diff --git a/t/t5540-http-push.sh b/t/t5540-http-push.sh index 5c0f4d7..bb18f8b 100755 --- a/t/t5540-http-push.sh +++ b/t/t5540-http-push.sh @@ -9,17 +9,16 @@ This test runs various sanity checks on http-push.' . ./test-lib.sh -ROOT_PATH="$PWD" -LIB_HTTPD_DAV=t -LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5540'} - if git http-push > /dev/null 2>&1 || [ $? -eq 128 ] then say "skipping test, USE_CURL_MULTI is not defined" test_done fi +LIB_HTTPD_DAV=t +LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5540'} . "$TEST_DIRECTORY"/lib-httpd.sh +ROOT_PATH="$PWD" start_httpd test_expect_success 'setup remote repository' ' @@ -43,7 +42,7 @@ test_expect_success 'setup remote repository' ' test_expect_success 'clone remote repository' ' cd "$ROOT_PATH" && - git clone $HTTPD_URL/test_repo.git test_repo_clone + git clone $HTTPD_URL/dumb/test_repo.git test_repo_clone ' test_expect_success 'push to remote repository with packed refs' ' @@ -76,7 +75,7 @@ test_expect_success 'http-push fetches unpacked objects' ' cp -R "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \ "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_unpacked.git && - git clone $HTTPD_URL/test_repo_unpacked.git \ + git clone $HTTPD_URL/dumb/test_repo_unpacked.git \ "$ROOT_PATH"/fetch_unpacked && # By reset, we force git to retrieve the object @@ -85,14 +84,14 @@ test_expect_success 'http-push fetches unpacked objects' ' git remote rm origin && git reflog expire --expire=0 --all && git prune && - git push -f -v $HTTPD_URL/test_repo_unpacked.git master) + git push -f -v $HTTPD_URL/dumb/test_repo_unpacked.git master) ' test_expect_success 'http-push fetches packed objects' ' cp -R "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \ "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_packed.git && - git clone $HTTPD_URL/test_repo_packed.git \ + git clone $HTTPD_URL/dumb/test_repo_packed.git \ "$ROOT_PATH"/test_repo_clone_packed && (cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_packed.git && @@ -105,7 +104,7 @@ test_expect_success 'http-push fetches packed objects' ' git remote rm origin && git reflog expire --expire=0 --all && git prune && - git push -f -v $HTTPD_URL/test_repo_packed.git master) + git push -f -v $HTTPD_URL/dumb/test_repo_packed.git master) ' test_expect_success 'create and delete remote branch' ' diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh index 690c466..2a58d0c 100755 --- a/t/t5541-http-push.sh +++ b/t/t5541-http-push.sh @@ -12,7 +12,7 @@ if test -n "$NO_CURL"; then fi ROOT_PATH="$PWD" -LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5550'} +LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5541'} . "$TEST_DIRECTORY"/lib-httpd.sh start_httpd @@ -36,10 +36,10 @@ test_expect_success 'setup remote repository' ' test_expect_success 'clone remote repository' ' cd "$ROOT_PATH" && - git clone $HTTPD_URL/git/test_repo.git test_repo_clone + git clone $HTTPD_URL/smart/test_repo.git test_repo_clone ' -test_expect_success 'push to remote repository with packed refs' ' +test_expect_success 'push to remote repository' ' cd "$ROOT_PATH"/test_repo_clone && : >path2 && git add path2 && @@ -55,15 +55,6 @@ test_expect_success 'push already up-to-date' ' git push ' -test_expect_success 'push to remote repository with unpacked refs' ' - (cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git && - rm packed-refs && - git update-ref refs/heads/master $ORIG_HEAD) && - git push && - (cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git && - test $HEAD = $(git rev-parse --verify HEAD)) -' - test_expect_success 'create and delete remote branch' ' cd "$ROOT_PATH"/test_repo_clone && git checkout -b dev && @@ -77,17 +68,15 @@ test_expect_success 'create and delete remote branch' ' ' cat >exp <<EOF -GET /git/test_repo.git/info/refs?service=git-upload-pack HTTP/1.1 200 -POST /git/test_repo.git/git-upload-pack HTTP/1.1 200 -GET /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200 -POST /git/test_repo.git/git-receive-pack HTTP/1.1 200 -GET /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200 -GET /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200 -POST /git/test_repo.git/git-receive-pack HTTP/1.1 200 -GET /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200 -POST /git/test_repo.git/git-receive-pack HTTP/1.1 200 -GET /git/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200 -POST /git/test_repo.git/git-receive-pack HTTP/1.1 200 +GET /smart/test_repo.git/info/refs?service=git-upload-pack HTTP/1.1 200 +POST /smart/test_repo.git/git-upload-pack HTTP/1.1 200 +GET /smart/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200 +POST /smart/test_repo.git/git-receive-pack HTTP/1.1 200 +GET /smart/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200 +GET /smart/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200 +POST /smart/test_repo.git/git-receive-pack HTTP/1.1 200 +GET /smart/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200 +POST /smart/test_repo.git/git-receive-pack HTTP/1.1 200 EOF test_expect_success 'used receive-pack service' ' sed -e " diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh index 8d6443f..8cfce96 100755 --- a/t/t5550-http-fetch.sh +++ b/t/t5550-http-fetch.sh @@ -30,7 +30,7 @@ test_expect_success 'create http-accessible bare repository' ' ' test_expect_success 'clone http repository' ' - git clone $HTTPD_URL/repo.git clone && + git clone $HTTPD_URL/dumb/repo.git clone && test_cmp file clone/file ' @@ -58,7 +58,7 @@ test_expect_success 'fetch packed objects' ' cd "$HTTPD_DOCUMENT_ROOT_PATH"/repo_pack.git && git --bare repack && git --bare prune-packed && - git clone $HTTPD_URL/repo_pack.git + git clone $HTTPD_URL/dumb/repo_pack.git ' test_expect_success 'did not use upload-pack service' ' diff --git a/t/t5551-http-fetch.sh b/t/t5551-http-fetch.sh index afddc2c..eb0c039 100755 --- a/t/t5551-http-fetch.sh +++ b/t/t5551-http-fetch.sh @@ -8,7 +8,7 @@ if test -n "$NO_CURL"; then test_done fi -LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5550'} +LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5551'} . "$TEST_DIRECTORY"/lib-httpd.sh start_httpd @@ -28,19 +28,21 @@ test_expect_success 'create http-accessible bare repository' ' ' cat >exp <<EOF -> GET /git/repo.git/info/refs?service=git-upload-pack HTTP/1.1 -Accept: */* -Pragma: no-cache +> GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 +> Accept: */* +> Pragma: no-cache + < HTTP/1.1 200 OK < Pragma: no-cache < Cache-Control: no-cache, max-age=0, must-revalidate < Content-Type: application/x-git-upload-pack-advertisement < -> POST /git/repo.git/git-upload-pack HTTP/1.1 -Accept-Encoding: deflate, gzip -Content-Type: application/x-git-upload-pack-request -Accept: application/x-git-upload-pack-response -Content-Length: xxxx +> POST /smart/repo.git/git-upload-pack HTTP/1.1 +> Accept-Encoding: deflate, gzip +> Content-Type: application/x-git-upload-pack-request +> Accept: application/x-git-upload-pack-response +> Content-Length: xxx + < HTTP/1.1 200 OK < Pragma: no-cache < Cache-Control: no-cache, max-age=0, must-revalidate @@ -48,13 +50,26 @@ Content-Length: xxxx < EOF test_expect_success 'clone http repository' ' - GIT_CURL_VERBOSE=1 git clone $HTTPD_URL/git/repo.git clone 2>err && + GIT_CURL_VERBOSE=1 git clone --quiet $HTTPD_URL/smart/repo.git clone 2>err && test_cmp file clone/file && - egrep "^([<>]|Pragma|Accept|Content-|Transfer-)" err | - egrep -v "^< (Server|Expires|Date|Content-Length:|Transfer-Encoding: chunked)" | + tr '\''\015'\'' Q <err | sed -e " - s/ // - s/^Content-Length: .*$/Content-Length: xxxx/ + s/Q\$// + /^[*] /d + + /^[^><]/{ + s/^/> / + } + + /^> User-Agent: /d + /^> Host: /d + s/^> Content-Length: .*/> Content-Length: xxx/ + + /^< Server: /d + /^< Expires: /d + /^< Date: /d + /^< Content-Length: /d + /^< Transfer-Encoding: /d " >act && test_cmp exp act ' @@ -68,10 +83,10 @@ test_expect_success 'fetch changes via http' ' ' cat >exp <<EOF -GET /git/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200 -POST /git/repo.git/git-upload-pack HTTP/1.1 200 -GET /git/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200 -POST /git/repo.git/git-upload-pack HTTP/1.1 200 +GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200 +POST /smart/repo.git/git-upload-pack HTTP/1.1 200 +GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200 +POST /smart/repo.git/git-upload-pack HTTP/1.1 200 EOF test_expect_success 'used upload-pack service' ' sed -e " -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html