diff options
author | Taylor Blau <me@ttaylorr.com> | 2021-08-29 22:48:52 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-08-29 23:23:39 -0700 |
commit | a241878ac7b67b1894c14d3c3e33ed13f11ae253 (patch) | |
tree | 84c18dcc4b130740020122fb075e71890e928279 | |
parent | c4203212e360b25a1c69467b5a8437d45a373cac (diff) | |
download | git-a241878ac7b67b1894c14d3c3e33ed13f11ae253.tar.gz |
object-store.h: teach for_each_packed_object to ignore kept packs
The next patch will reimplement a function that wants to iterate over
packed objects while ignoring packs which are marked as kept (either
in-core or on-disk).
Teach for_each_packed_object() to ignore all objects from those packs by
adding a new flag for each of the "kept" states that a pack can be in.
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | object-store.h | 6 | ||||
-rw-r--r-- | packfile.c | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/object-store.h b/object-store.h index d24915ced1..b4dc6668aa 100644 --- a/object-store.h +++ b/object-store.h @@ -455,6 +455,12 @@ enum for_each_object_flags { * Visit objects within a pack in packfile order rather than .idx order */ FOR_EACH_OBJECT_PACK_ORDER = (1<<2), + + /* Only iterate over packs that are not marked as kept in-core. */ + FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS = (1<<3), + + /* Only iterate over packs that do not have .keep files. */ + FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS = (1<<4), }; /* diff --git a/packfile.c b/packfile.c index 9ef6d98292..4d0d625238 100644 --- a/packfile.c +++ b/packfile.c @@ -2205,6 +2205,12 @@ int for_each_packed_object(each_packed_object_fn cb, void *data, if ((flags & FOR_EACH_OBJECT_PROMISOR_ONLY) && !p->pack_promisor) continue; + if ((flags & FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS) && + p->pack_keep_in_core) + continue; + if ((flags & FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS) && + p->pack_keep) + continue; if (open_pack_index(p)) { pack_errors = 1; continue; |