What should happen in credential-cache on recoverable error without SPAWN option?
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 14, 2021, 19:09 UTC
- Message-ID
- <xmqqilz30yap.fsf@gitster.g>
- In-Reply-To
- <20210914072600.11552-3-carenas@gmail.com>
While reviewing Carlo's "credential-cache: check for windows specific errors", I noticed this piece of code, that came from 8ec6c8d7 (credential-cache: report more daemon connection errors, 2012-01-09):
if (send_request(socket, &buf) < 0) {
if (errno != ENOENT && errno != ECONNREFUSED)
die_errno("unable to connect to cache daemon");
if (flags & FLAG_SPAWN) {
spawn_daemon(socket);
if (send_request(socket, &buf) < 0)
die_errno("unable to connect to cache daemon");
}
}What would happen when we get a resumable error and then weren't given the SPAWN flag? It seems that do_cache() simply returns without dying. Shouldn't we get "unable to connect" in such a case?
This in turn came from 98c2924c (credentials: unable to connect to cache daemon, 2012-01-07), before it, the code read like this:
if (!send_request(socket, &buf))
return;
if (flags & FLAG_SPAWN) {
spawn_daemon(socket);
send_request(socket, &buf);
}so it looks to me that I am puzzled by an incomplete error handling introduced by 98c2924c, and if we wanted to complete it, it may perhaps look like this patch on top of Carlo's patch?
Or am I barking up a wrong tree and error checking in this command does not really make a real-life difference?
Thanks.
builtin/credential-cache.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
diff --git c/builtin/credential-cache.c w/builtin/credential-cache.c index 78c02ad531..a41a17e58f 100644 --- c/builtin/credential-cache.c +++ w/builtin/credential-cache.c @@ -101,13 +101,11 @@ static void do_cache(const char *socket, const char *action, int timeout, } if (send_request(socket, &buf) < 0) { - if (connection_fatally_broken(errno)) + if (connection_fatally_broken(errno) && !(flag & FLAG_SPAWN)) + die_errno("unable to connect to cache daemon"); + spawn_daemon(socket); + if (send_request(socket, &buf) < 0) die_errno("unable to connect to cache daemon"); - if (flags & FLAG_SPAWN) { - spawn_daemon(socket); - if (send_request(socket, &buf) < 0) - die_errno("unable to connect to cache daemon"); - } } strbuf_release(&buf); }