Merge branch 'jk/http-push-status-fix'
"git push" client talking to an HTTP server did not diagnose the lack of the final status report from the other side correctly, which has been corrected. * jk/http-push-status-fix: transport-helper: recognize "expecting report" error from send-pack send-pack: complain about "expecting report" with --helper-status
This commit is contained in:
commit
735907bde1
@ -87,6 +87,10 @@ static void print_helper_status(struct ref *ref)
|
||||
break;
|
||||
|
||||
case REF_STATUS_EXPECTING_REPORT:
|
||||
res = "error";
|
||||
msg = "expecting report";
|
||||
break;
|
||||
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
@ -131,6 +131,7 @@ prepare_httpd() {
|
||||
cp "$TEST_PATH"/passwd "$HTTPD_ROOT_PATH"
|
||||
install_script incomplete-length-upload-pack-v2-http.sh
|
||||
install_script incomplete-body-upload-pack-v2-http.sh
|
||||
install_script error-no-report.sh
|
||||
install_script broken-smart-http.sh
|
||||
install_script error-smart-http.sh
|
||||
install_script error.sh
|
||||
|
@ -122,6 +122,7 @@ Alias /auth/dumb/ www/auth/dumb/
|
||||
</LocationMatch>
|
||||
ScriptAlias /smart/incomplete_length/git-upload-pack incomplete-length-upload-pack-v2-http.sh/
|
||||
ScriptAlias /smart/incomplete_body/git-upload-pack incomplete-body-upload-pack-v2-http.sh/
|
||||
ScriptAlias /smart/no_report/git-receive-pack error-no-report.sh/
|
||||
ScriptAliasMatch /error_git_upload_pack/(.*)/git-upload-pack error.sh/
|
||||
ScriptAliasMatch /smart_*[^/]*/(.*) ${GIT_EXEC_PATH}/git-http-backend/$1
|
||||
ScriptAlias /broken_smart/ broken-smart-http.sh/
|
||||
@ -137,6 +138,9 @@ ScriptAliasMatch /one_time_perl/(.*) apply-one-time-perl.sh/$1
|
||||
<Files incomplete-body-upload-pack-v2-http.sh>
|
||||
Options ExecCGI
|
||||
</Files>
|
||||
<Files error-no-report.sh>
|
||||
Options ExecCGI
|
||||
</Files>
|
||||
<Files broken-smart-http.sh>
|
||||
Options ExecCGI
|
||||
</Files>
|
||||
|
6
t/lib-httpd/error-no-report.sh
Normal file
6
t/lib-httpd/error-no-report.sh
Normal file
@ -0,0 +1,6 @@
|
||||
echo "Content-Type: application/x-git-receive-pack-result"
|
||||
echo
|
||||
printf '0013\001000eunpack ok\n'
|
||||
printf '0015\002skipping report\n'
|
||||
printf '0009\0010000'
|
||||
printf '0000'
|
@ -509,4 +509,20 @@ test_expect_success 'colorize errors/hints' '
|
||||
test_i18ngrep ! "^hint: " decoded
|
||||
'
|
||||
|
||||
test_expect_success 'report error server does not provide ref status' '
|
||||
git init "$HTTPD_DOCUMENT_ROOT_PATH/no_report" &&
|
||||
git -C "$HTTPD_DOCUMENT_ROOT_PATH/no_report" config http.receivepack true &&
|
||||
test_must_fail git push --porcelain \
|
||||
$HTTPD_URL_USER_PASS/smart/no_report \
|
||||
HEAD:refs/tags/will-fail >actual &&
|
||||
test_must_fail git -C "$HTTPD_DOCUMENT_ROOT_PATH/no_report" \
|
||||
rev-parse --verify refs/tags/will-fail &&
|
||||
cat >expect <<-EOF &&
|
||||
To $HTTPD_URL/smart/no_report
|
||||
! HEAD:refs/tags/will-fail [remote failure] (remote failed to report status)
|
||||
Done
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
@ -845,6 +845,10 @@ static int push_update_ref_status(struct strbuf *buf,
|
||||
forced = 1;
|
||||
FREE_AND_NULL(msg);
|
||||
}
|
||||
else if (!strcmp(msg, "expecting report")) {
|
||||
status = REF_STATUS_EXPECTING_REPORT;
|
||||
FREE_AND_NULL(msg);
|
||||
}
|
||||
}
|
||||
|
||||
if (state->hint)
|
||||
|
Loading…
Reference in New Issue
Block a user