static void load_all(void) { struct packed_git *p = get_all_packs(the_repository); while (p) { add_pack(p); p = p->next; } }
static struct pack_list * add_pack_file(const char *filename) { struct packed_git *p = get_all_packs(the_repository); if (strlen(filename) < 40) die("Bad pack filename: %s", filename); while (p) { if (strstr(p->pack_name, filename)) return add_pack(p); p = p->next; } die("Filename %s not found in packed_git", filename); }
static void get_info_packs(struct strbuf *hdr, char *arg) { size_t objdirlen = strlen(get_object_directory()); struct strbuf buf = STRBUF_INIT; struct packed_git *p; size_t cnt = 0; select_getanyfile(hdr); for (p = get_all_packs(the_repository); p; p = p->next) { if (p->pack_local) cnt++; } strbuf_grow(&buf, cnt * 53 + 2); for (p = get_all_packs(the_repository); 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(hdr); send_strbuf(hdr, "text/plain; charset=utf-8", &buf); strbuf_release(&buf); }
static int too_many_packs(void) { struct packed_git *p; int cnt; if (gc_auto_pack_limit <= 0) return 0; for (cnt = 0, p = get_all_packs(the_repository); p; p = p->next) { if (!p->pack_local) continue; if (p->pack_keep) continue; /* * Perhaps check the size of the pack and count only * very small ones here? */ cnt++; } return gc_auto_pack_limit < cnt; }
static struct packed_git *find_base_packs(struct string_list *packs, unsigned long limit) { struct packed_git *p, *base = NULL; for (p = get_all_packs(the_repository); p; p = p->next) { if (!p->pack_local) continue; if (limit) { if (p->pack_size >= limit) string_list_append(packs, p->pack_name); } else if (!base || base->pack_size < p->pack_size) { base = p; } } if (base) string_list_append(packs, base->pack_name); return base; }