#!/bin/sh find_file() { cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && find $1 -type f | sed -e 1q } config() { git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" config $1 $2 } test_expect_success 'setup repository' ' echo content >file && git add file && git commit -m one && mkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && git --bare init && : >objects/info/alternates && : >objects/info/http-alternates ) && git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && git push public master:master && (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && git repack -a -d ) && echo other >file && git add file && git commit -m two && git push public master:master && LOOSE_URL=$(find_file objects/??) && PACK_URL=$(find_file objects/pack/*.pack) && IDX_URL=$(find_file objects/pack/*.idx) ' get_static_files() { GET HEAD "$1" && GET info/refs "$1" && GET objects/info/packs "$1" && GET objects/info/alternates "$1" && GET objects/info/http-alternates "$1" && GET $LOOSE_URL "$1" && GET $PACK_URL "$1" && GET $IDX_URL "$1" } SMART=smart GIT_HTTP_EXPORT_ALL=1 && export GIT_HTTP_EXPORT_ALL test_expect_success 'direct refs/heads/master not found' ' GET refs/heads/master "404 Not Found" ' test_expect_success 'static file is ok' ' get_static_files "200 OK" ' SMART=smart_noexport unset GIT_HTTP_EXPORT_ALL test_expect_success 'no export by default' ' get_static_files "404 Not Found" ' test_expect_success 'export if git-daemon-export-ok' ' (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && touch git-daemon-export-ok ) && get_static_files "200 OK" ' SMART=smart GIT_HTTP_EXPORT_ALL=1 && export GIT_HTTP_EXPORT_ALL test_expect_success 'static file if http.getanyfile true is ok' ' config http.getanyfile true && get_static_files "200 OK" ' test_expect_success 'static file if http.getanyfile false fails' ' config http.getanyfile false && get_static_files "403 Forbidden" ' test_expect_success 'http.uploadpack default enabled' ' GET info/refs?service=git-upload-pack "200 OK" && POST git-upload-pack 0000 "200 OK" ' test_expect_success 'http.uploadpack true' ' config http.uploadpack true && GET info/refs?service=git-upload-pack "200 OK" && POST git-upload-pack 0000 "200 OK" ' test_expect_success 'http.uploadpack false' ' config http.uploadpack false && GET info/refs?service=git-upload-pack "403 Forbidden" && POST git-upload-pack 0000 "403 Forbidden" ' test_expect_success 'http.receivepack default disabled' ' GET info/refs?service=git-receive-pack "403 Forbidden" && POST git-receive-pack 0000 "403 Forbidden" ' test_expect_success 'http.receivepack true' ' config http.receivepack true && GET info/refs?service=git-receive-pack "200 OK" && POST git-receive-pack 0000 "200 OK" ' test_expect_success 'http.receivepack false' ' config http.receivepack false && GET info/refs?service=git-receive-pack "403 Forbidden" && POST git-receive-pack 0000 "403 Forbidden" '