commit 2a0fb198ea0e9b0b82518ecf0f8d04962d74aca6 from: Stefan Sperling via: Thomas Adam date: Tue Nov 08 20:14:11 2022 UTC fix capabilities announced by gotsh when no reference exist in repository ok op@ commit - 9b2510924916cdc1e66d879b43f4dc953aac3c83 commit + 2a0fb198ea0e9b0b82518ecf0f8d04962d74aca6 blob - bcfba4ab960fd7d539e4248572d69f7fc58159dc blob + a4416fcbce8dd3e76d89bda1f9a84447af2ce030 --- lib/serve.c +++ lib/serve.c @@ -220,7 +220,7 @@ send_ref(int outfd, uint8_t *id, const char *refname, } static const struct got_error * -send_zero_refs(int outfd, int chattygot) +send_zero_refs(int outfd, int client_is_reading, int chattygot) { const struct got_error *err = NULL; char buf[GOT_PKT_MAX]; @@ -237,10 +237,18 @@ send_zero_refs(int outfd, int chattygot) if (len >= sizeof(buf)) return got_error(GOT_ERR_NO_SPACE); - err = got_gitproto_append_capabilities(&capalen, buf, len, - sizeof(buf), read_capabilities, nitems(read_capabilities)); - if (err) - return err; + if (client_is_reading) { + err = got_gitproto_append_capabilities(&capalen, buf, len, + sizeof(buf), read_capabilities, nitems(read_capabilities)); + if (err) + return err; + } else { + err = got_gitproto_append_capabilities(&capalen, buf, len, + sizeof(buf), write_capabilities, + nitems(write_capabilities)); + if (err) + return err; + } return got_pkt_writepkt(outfd, buf, len + capalen, chattygot); } @@ -315,7 +323,8 @@ announce_refs(int outfd, struct imsgbuf *ibuf, int cli nrefs = ireflist.nrefs; have_nrefs = 1; if (nrefs == 0) - err = send_zero_refs(outfd, chattygot); + err = send_zero_refs(outfd, client_is_reading, + chattygot); break; case GOTD_IMSG_REF: if (!have_nrefs || nrefs == 0) {