Merge branch 'dt/smart-http-detect-server-going-away'
When the http server gives an incomplete response to a smart-http rpc call, it could lead to client waiting for a full response that will never come. Teach the client side to notice this condition and abort the transfer. An improvement counterproposal has failed. cf. <20161114194049.mktpsvgdhex2f4zv@sigill.intra.peff.net> * dt/smart-http-detect-server-going-away: upload-pack: optionally allow fetching any sha1 remote-curl: don't hang when a server dies before any output
This commit is contained in:
@ -280,6 +280,58 @@ test_expect_success 'large fetch-pack requests can be split across POSTs' '
|
||||
test_line_count = 2 posts
|
||||
'
|
||||
|
||||
test_expect_success 'test allowreachablesha1inwant' '
|
||||
test_when_finished "rm -rf test_reachable.git" &&
|
||||
server="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
|
||||
master_sha=$(git -C "$server" rev-parse refs/heads/master) &&
|
||||
git -C "$server" config uploadpack.allowreachablesha1inwant 1 &&
|
||||
|
||||
git init --bare test_reachable.git &&
|
||||
git -C test_reachable.git remote add origin "$HTTPD_URL/smart/repo.git" &&
|
||||
git -C test_reachable.git fetch origin "$master_sha"
|
||||
'
|
||||
|
||||
test_expect_success 'test allowreachablesha1inwant with unreachable' '
|
||||
test_when_finished "rm -rf test_reachable.git; git reset --hard $(git rev-parse HEAD)" &&
|
||||
|
||||
#create unreachable sha
|
||||
echo content >file2 &&
|
||||
git add file2 &&
|
||||
git commit -m two &&
|
||||
git push public HEAD:refs/heads/doomed &&
|
||||
git push public :refs/heads/doomed &&
|
||||
|
||||
server="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
|
||||
master_sha=$(git -C "$server" rev-parse refs/heads/master) &&
|
||||
git -C "$server" config uploadpack.allowreachablesha1inwant 1 &&
|
||||
|
||||
git init --bare test_reachable.git &&
|
||||
git -C test_reachable.git remote add origin "$HTTPD_URL/smart/repo.git" &&
|
||||
test_must_fail git -C test_reachable.git fetch origin "$(git rev-parse HEAD)"
|
||||
'
|
||||
|
||||
test_expect_success 'test allowanysha1inwant with unreachable' '
|
||||
test_when_finished "rm -rf test_reachable.git; git reset --hard $(git rev-parse HEAD)" &&
|
||||
|
||||
#create unreachable sha
|
||||
echo content >file2 &&
|
||||
git add file2 &&
|
||||
git commit -m two &&
|
||||
git push public HEAD:refs/heads/doomed &&
|
||||
git push public :refs/heads/doomed &&
|
||||
|
||||
server="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
|
||||
master_sha=$(git -C "$server" rev-parse refs/heads/master) &&
|
||||
git -C "$server" config uploadpack.allowreachablesha1inwant 1 &&
|
||||
|
||||
git init --bare test_reachable.git &&
|
||||
git -C test_reachable.git remote add origin "$HTTPD_URL/smart/repo.git" &&
|
||||
test_must_fail git -C test_reachable.git fetch origin "$(git rev-parse HEAD)" &&
|
||||
|
||||
git -C "$server" config uploadpack.allowanysha1inwant 1 &&
|
||||
git -C test_reachable.git fetch origin "$(git rev-parse HEAD)"
|
||||
'
|
||||
|
||||
test_expect_success EXPENSIVE 'http can handle enormous ref negotiation' '
|
||||
(
|
||||
cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
|
||||
|
Reference in New Issue
Block a user