http: normalize curl results for dumb loose and alternates fetches
commitccbbd8bf66ca88385a34b16abcc1d5a800650d3a
authorJeff King <peff@peff.net>
Sun, 24 Mar 2019 12:09:46 +0000 (24 08:09 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sun, 24 Mar 2019 12:22:40 +0000 (24 21:22 +0900)
tree3aaacf6dd7897e03a8ab5a770ce004281f396173
parenta3722bcbbd850bf02aea19d58de112ef513cb2f1
http: normalize curl results for dumb loose and alternates fetches

If the dumb-http walker encounters a 404 when fetching a loose object,
it then looks at any http-alternates for the object. The 404 check is
implemented by missing_target(), which checks not only the http code,
but also that we got an http error from the CURLcode.

That broke when we stopped using CURLOPT_FAILONERROR in 17966c0a63
(http: avoid disconnecting on 404s for loose objects, 2016-07-11), since
our CURLcode will now be CURLE_OK. As a result, fetching over dumb-http
from a repository with alternates could result in Git printing "Unable
to find abcd1234..." and aborting.

We could probably fix this just by loosening missing_target(). However,
there's other code which looks at the curl result, and it would have to
be tweaked as well. Instead, let's just normalize the result the same
way the smart-http code does.

There's a similar case in processing the alternates (where we failover
from "info/http-alternates" to "info/alternates"). We'll give it the
same treatment.

After this patch, we should be hitting all code paths that need this
normalization (notably absent here is the http_pack_request path, but it
does not use FAILONERROR, nor missing_target()).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
http-walker.c
t/t5550-http-fetch-dumb.sh