diff options
author | Junio C Hamano <junkio@cox.net> | 2006-03-20 14:07:59 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-03-20 14:07:59 -0800 |
commit | bb52807916598301e670963e6cc5f1f5cdca3ad7 (patch) | |
tree | 4ea22e195a94e1dd2a4c2d69426924c4b2be3b99 | |
parent | generate-cmdlist: style cleanups. (diff) | |
download | tgif-bb52807916598301e670963e6cc5f1f5cdca3ad7.tar.xz |
http-fetch: nicer warning for a server with unreliable 404 status
When a repository otherwise properly prepared is served by a
dumb HTTP server that sends "No such page" output with 200
status for human consumption to a request for a page that does
not exist, the users will get an alarming "File X corrupt" error
message. Hint that they might be dealing with such a server at
the end and suggest running fsck-objects to check if the result
is OK (the pack-fallback code does the right thing in this case
so unless a loose object file was actually corrupt the result
should check OK).
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | http-fetch.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/http-fetch.c b/http-fetch.c index 7de818b109..dc67218ae7 100644 --- a/http-fetch.c +++ b/http-fetch.c @@ -8,6 +8,7 @@ #define RANGE_HEADER_SIZE 30 static int got_alternates = -1; +static int corrupt_object_found = 0; static struct curl_slist *no_pragma_header; @@ -834,6 +835,7 @@ static int fetch_object(struct alt_base *repo, unsigned char *sha1) obj_req->errorstr, obj_req->curl_result, obj_req->http_code, hex); } else if (obj_req->zret != Z_STREAM_END) { + corrupt_object_found++; ret = error("File %s (%s) corrupt", hex, obj_req->url); } else if (memcmp(obj_req->sha1, obj_req->real_sha1, 20)) { ret = error("File %s has bad hash", hex); @@ -993,5 +995,11 @@ int main(int argc, char **argv) http_cleanup(); + if (corrupt_object_found) { + fprintf(stderr, +"Some loose object were found to be corrupt, but they might be just\n" +"a false '404 Not Found' error message sent with incorrect HTTP\n" +"status code. Suggest running git fsck-objects.\n"); + } return rc; } |