mirror of
https://github.com/git/git.git
synced 2026-01-10 10:13:33 +00:00
odb: move kept cache into struct packfile_store
The object database tracks a cache of "kept" packfiles, which is used by git-pack-objects(1) to handle cruft objects. With the introduction of the `struct packfile_store` we have a better place to host this cache though. Move the cache accordingly. This moves the last bit of packfile-related state from the object database into the packfile store. Adapt the comment for the `packfiles` pointer in `struct object_database` to reflect this. 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
fe835b0ca0
commit
bd1a521de8
10
odb.h
10
odb.h
@@ -131,16 +131,8 @@ struct object_database {
|
|||||||
struct commit_graph *commit_graph;
|
struct commit_graph *commit_graph;
|
||||||
unsigned commit_graph_attempted : 1; /* if loading has been attempted */
|
unsigned commit_graph_attempted : 1; /* if loading has been attempted */
|
||||||
|
|
||||||
/*
|
/* Should only be accessed directly by packfile.c and midx.c. */
|
||||||
* private data
|
|
||||||
*
|
|
||||||
* Should only be accessed directly by packfile.c and midx.c.
|
|
||||||
*/
|
|
||||||
struct packfile_store *packfiles;
|
struct packfile_store *packfiles;
|
||||||
struct {
|
|
||||||
struct packed_git **packs;
|
|
||||||
unsigned flags;
|
|
||||||
} kept_pack_cache;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is meant to hold a *small* number of objects that you would
|
* This is meant to hold a *small* number of objects that you would
|
||||||
|
|||||||
16
packfile.c
16
packfile.c
@@ -2091,19 +2091,19 @@ int find_pack_entry(struct repository *r, const struct object_id *oid, struct pa
|
|||||||
static void maybe_invalidate_kept_pack_cache(struct repository *r,
|
static void maybe_invalidate_kept_pack_cache(struct repository *r,
|
||||||
unsigned flags)
|
unsigned flags)
|
||||||
{
|
{
|
||||||
if (!r->objects->kept_pack_cache.packs)
|
if (!r->objects->packfiles->kept_cache.packs)
|
||||||
return;
|
return;
|
||||||
if (r->objects->kept_pack_cache.flags == flags)
|
if (r->objects->packfiles->kept_cache.flags == flags)
|
||||||
return;
|
return;
|
||||||
FREE_AND_NULL(r->objects->kept_pack_cache.packs);
|
FREE_AND_NULL(r->objects->packfiles->kept_cache.packs);
|
||||||
r->objects->kept_pack_cache.flags = 0;
|
r->objects->packfiles->kept_cache.flags = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct packed_git **kept_pack_cache(struct repository *r, unsigned flags)
|
struct packed_git **kept_pack_cache(struct repository *r, unsigned flags)
|
||||||
{
|
{
|
||||||
maybe_invalidate_kept_pack_cache(r, flags);
|
maybe_invalidate_kept_pack_cache(r, flags);
|
||||||
|
|
||||||
if (!r->objects->kept_pack_cache.packs) {
|
if (!r->objects->packfiles->kept_cache.packs) {
|
||||||
struct packed_git **packs = NULL;
|
struct packed_git **packs = NULL;
|
||||||
size_t nr = 0, alloc = 0;
|
size_t nr = 0, alloc = 0;
|
||||||
struct packed_git *p;
|
struct packed_git *p;
|
||||||
@@ -2126,11 +2126,11 @@ struct packed_git **kept_pack_cache(struct repository *r, unsigned flags)
|
|||||||
ALLOC_GROW(packs, nr + 1, alloc);
|
ALLOC_GROW(packs, nr + 1, alloc);
|
||||||
packs[nr] = NULL;
|
packs[nr] = NULL;
|
||||||
|
|
||||||
r->objects->kept_pack_cache.packs = packs;
|
r->objects->packfiles->kept_cache.packs = packs;
|
||||||
r->objects->kept_pack_cache.flags = flags;
|
r->objects->packfiles->kept_cache.flags = flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
return r->objects->kept_pack_cache.packs;
|
return r->objects->packfiles->kept_cache.packs;
|
||||||
}
|
}
|
||||||
|
|
||||||
int find_kept_pack_entry(struct repository *r,
|
int find_kept_pack_entry(struct repository *r,
|
||||||
|
|||||||
14
packfile.h
14
packfile.h
@@ -64,6 +64,20 @@ struct packfile_store {
|
|||||||
*/
|
*/
|
||||||
struct packed_git *packs;
|
struct packed_git *packs;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cache of packfiles which are marked as "kept", either because there
|
||||||
|
* is an on-disk ".keep" file or because they are marked as "kept" in
|
||||||
|
* memory.
|
||||||
|
*
|
||||||
|
* Should not be accessed directly, but via `kept_pack_cache()`. The
|
||||||
|
* list of packs gets invalidated when the stored flags and the flags
|
||||||
|
* passed to `kept_pack_cache()` mismatch.
|
||||||
|
*/
|
||||||
|
struct {
|
||||||
|
struct packed_git **packs;
|
||||||
|
unsigned flags;
|
||||||
|
} kept_cache;
|
||||||
|
|
||||||
/* A most-recently-used ordered version of the packs list. */
|
/* A most-recently-used ordered version of the packs list. */
|
||||||
struct list_head mru;
|
struct list_head mru;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user