mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
packfile: introduce macro to iterate through packs
We have a bunch of different sites that want to iterate through all packs of a given `struct packfile_store`. This pattern is somewhat verbose and repetitive, which makes it somewhat cumbersome. Introduce a new macro `repo_for_each_pack()` that removes some of the boilerplate. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
5b410c8276
commit
86d8c62f48
@@ -86,7 +86,6 @@ struct object_entry *packlist_find(struct packing_data *pdata,
|
||||
|
||||
static void prepare_in_pack_by_idx(struct packing_data *pdata)
|
||||
{
|
||||
struct packfile_store *packs = pdata->repo->objects->packfiles;
|
||||
struct packed_git **mapping, *p;
|
||||
int cnt = 0, nr = 1U << OE_IN_PACK_BITS;
|
||||
|
||||
@@ -96,13 +95,13 @@ static void prepare_in_pack_by_idx(struct packing_data *pdata)
|
||||
* (i.e. in_pack_idx also zero) should return NULL.
|
||||
*/
|
||||
mapping[cnt++] = NULL;
|
||||
for (p = packfile_store_get_all_packs(packs); p; p = p->next, cnt++) {
|
||||
repo_for_each_pack(pdata->repo, p) {
|
||||
if (cnt == nr) {
|
||||
free(mapping);
|
||||
return;
|
||||
}
|
||||
p->index = cnt;
|
||||
mapping[cnt] = p;
|
||||
mapping[cnt++] = p;
|
||||
}
|
||||
pdata->in_pack_by_idx = mapping;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user