> The code in prepare_midx_pack() converts a numeric pack id (referenced > inside the midx) into a "struct packed_git" pointer, caching the results > in multi_pack_index->packs. That field holds NULL for "we have not > looked it up yet" or a valid pointer to a packed_git. It probably needs > to hold a third state: "we tried and failed". Yup, that seems like a good direction to me. > [1] There probably are optimization opportunities in add_packed_git(). I > don't think re-ordering will help much in the common case that we > actually do have the pack. But really, most callers do not care > about these auxiliary files at all! We could simply skip them during > the initial setup and lazy-load them via accessor functions. Nice idea. I initially though, "that's not right, we definitely need to populate the flag bits, e.g., p->is_cruft". But that was before I read "and lazy-load them via accessor functions". That turns those fields into a tri-state, which is a nice way to avoid this altogether. Thanks, Taylor