static void get_info_refs(char *arg) { const char *service_name = get_parameter("service"); struct strbuf buf = STRBUF_INIT; hdr_nocache(); if (service_name) { const char *argv[] = {NULL /* service name */, "--stateless-rpc", "--advertise-refs", ".", NULL}; struct rpc_service *svc = select_service(service_name); strbuf_addf(&buf, "application/x-git-%s-advertisement", svc->name); hdr_str(content_type, buf.buf); end_headers(); packet_write(1, "# service=git-%s\n", svc->name); packet_flush(1); argv[0] = svc->name; run_service(argv); } else { select_getanyfile(); for_each_namespaced_ref(show_text_ref, &buf); send_strbuf("text/plain", &buf); } strbuf_release(&buf); }
static void get_info_packs(char *arg) { size_t objdirlen = strlen(get_object_directory()); struct strbuf buf = STRBUF_INIT; struct packed_git *p; size_t cnt = 0; select_getanyfile(); prepare_packed_git(); for (p = packed_git; p; p = p->next) { if (p->pack_local) cnt++; } strbuf_grow(&buf, cnt * 53 + 2); for (p = packed_git; p; p = p->next) { if (p->pack_local) strbuf_addf(&buf, "P %s\n", p->pack_name + objdirlen + 6); } strbuf_addch(&buf, '\n'); hdr_nocache(); send_strbuf("text/plain; charset=utf-8", &buf); strbuf_release(&buf); }
static void get_head(char *arg) { struct strbuf buf = STRBUF_INIT; select_getanyfile(); head_ref_namespaced(show_head_ref, &buf); send_strbuf("text/plain", &buf); strbuf_release(&buf); }
static void get_idx_file(char *name) { select_getanyfile(); hdr_cache_forever(); send_local_file("application/x-git-packed-objects-toc", name); }
static void get_loose_object(char *name) { select_getanyfile(); hdr_cache_forever(); send_local_file("application/x-git-loose-object", name); }
static void get_text_file(char *name) { select_getanyfile(); hdr_nocache(); send_local_file("text/plain", name); }
static void get_idx_file(struct strbuf *hdr, char *name) { select_getanyfile(hdr); hdr_cache_forever(hdr); send_local_file(hdr, "application/x-git-packed-objects-toc", name); }
static void get_loose_object(struct strbuf *hdr, char *name) { select_getanyfile(hdr); hdr_cache_forever(hdr); send_local_file(hdr, "application/x-git-loose-object", name); }
static void get_text_file(struct strbuf *hdr, char *name) { select_getanyfile(hdr); hdr_nocache(hdr); send_local_file(hdr, "text/plain", name); }