mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
odb: move MRU list of packfiles into struct packfile_store
The object database tracks the list of packfiles in most-recently-used order, which is mostly used to favor reading from packfiles that contain most of the objects that we're currently accessing. With the introduction of the `struct packfile_store` we have a better place to host this list though. Move the list accordingly. 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
14aaf5c9d8
commit
fe835b0ca0
2
midx.c
2
midx.c
@@ -468,7 +468,7 @@ int prepare_midx_pack(struct multi_pack_index *m,
|
|||||||
m->source->local);
|
m->source->local);
|
||||||
if (p) {
|
if (p) {
|
||||||
install_packed_git(r, p);
|
install_packed_git(r, p);
|
||||||
list_add_tail(&p->mru, &r->objects->packed_git_mru);
|
list_add_tail(&p->mru, &r->objects->packfiles->mru);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
odb.c
2
odb.c
@@ -997,7 +997,6 @@ struct object_database *odb_new(struct repository *repo)
|
|||||||
memset(o, 0, sizeof(*o));
|
memset(o, 0, sizeof(*o));
|
||||||
o->repo = repo;
|
o->repo = repo;
|
||||||
o->packfiles = packfile_store_new(o);
|
o->packfiles = packfile_store_new(o);
|
||||||
INIT_LIST_HEAD(&o->packed_git_mru);
|
|
||||||
pthread_mutex_init(&o->replace_mutex, NULL);
|
pthread_mutex_init(&o->replace_mutex, NULL);
|
||||||
string_list_init_dup(&o->submodule_source_paths);
|
string_list_init_dup(&o->submodule_source_paths);
|
||||||
return o;
|
return o;
|
||||||
@@ -1035,7 +1034,6 @@ void odb_clear(struct object_database *o)
|
|||||||
free((char *) o->cached_objects[i].value.buf);
|
free((char *) o->cached_objects[i].value.buf);
|
||||||
FREE_AND_NULL(o->cached_objects);
|
FREE_AND_NULL(o->cached_objects);
|
||||||
|
|
||||||
INIT_LIST_HEAD(&o->packed_git_mru);
|
|
||||||
close_object_store(o);
|
close_object_store(o);
|
||||||
packfile_store_free(o->packfiles);
|
packfile_store_free(o->packfiles);
|
||||||
o->packfiles = NULL;
|
o->packfiles = NULL;
|
||||||
|
|||||||
4
odb.h
4
odb.h
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
#include "hashmap.h"
|
#include "hashmap.h"
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
#include "list.h"
|
|
||||||
#include "oidset.h"
|
#include "oidset.h"
|
||||||
#include "oidmap.h"
|
#include "oidmap.h"
|
||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
@@ -138,9 +137,6 @@ struct object_database {
|
|||||||
* Should only be accessed directly by packfile.c and midx.c.
|
* Should only be accessed directly by packfile.c and midx.c.
|
||||||
*/
|
*/
|
||||||
struct packfile_store *packfiles;
|
struct packfile_store *packfiles;
|
||||||
/* A most-recently-used ordered version of the packed_git list. */
|
|
||||||
struct list_head packed_git_mru;
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
struct packed_git **packs;
|
struct packed_git **packs;
|
||||||
unsigned flags;
|
unsigned flags;
|
||||||
|
|||||||
11
packfile.c
11
packfile.c
@@ -1017,10 +1017,10 @@ static void prepare_packed_git_mru(struct repository *r)
|
|||||||
{
|
{
|
||||||
struct packed_git *p;
|
struct packed_git *p;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&r->objects->packed_git_mru);
|
INIT_LIST_HEAD(&r->objects->packfiles->mru);
|
||||||
|
|
||||||
for (p = r->objects->packfiles->packs; p; p = p->next)
|
for (p = r->objects->packfiles->packs; p; p = p->next)
|
||||||
list_add_tail(&p->mru, &r->objects->packed_git_mru);
|
list_add_tail(&p->mru, &r->objects->packfiles->mru);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void prepare_packed_git(struct repository *r)
|
static void prepare_packed_git(struct repository *r)
|
||||||
@@ -1095,7 +1095,7 @@ struct packed_git *get_all_packs(struct repository *r)
|
|||||||
struct list_head *get_packed_git_mru(struct repository *r)
|
struct list_head *get_packed_git_mru(struct repository *r)
|
||||||
{
|
{
|
||||||
prepare_packed_git(r);
|
prepare_packed_git(r);
|
||||||
return &r->objects->packed_git_mru;
|
return &r->objects->packfiles->mru;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long unpack_object_header_buffer(const unsigned char *buf,
|
unsigned long unpack_object_header_buffer(const unsigned char *buf,
|
||||||
@@ -2078,10 +2078,10 @@ int find_pack_entry(struct repository *r, const struct object_id *oid, struct pa
|
|||||||
if (!r->objects->packfiles->packs)
|
if (!r->objects->packfiles->packs)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
list_for_each(pos, &r->objects->packed_git_mru) {
|
list_for_each(pos, &r->objects->packfiles->mru) {
|
||||||
struct packed_git *p = list_entry(pos, struct packed_git, mru);
|
struct packed_git *p = list_entry(pos, struct packed_git, mru);
|
||||||
if (!p->multi_pack_index && fill_pack_entry(oid, e, p)) {
|
if (!p->multi_pack_index && fill_pack_entry(oid, e, p)) {
|
||||||
list_move(&p->mru, &r->objects->packed_git_mru);
|
list_move(&p->mru, &r->objects->packfiles->mru);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2347,6 +2347,7 @@ struct packfile_store *packfile_store_new(struct object_database *odb)
|
|||||||
struct packfile_store *store;
|
struct packfile_store *store;
|
||||||
CALLOC_ARRAY(store, 1);
|
CALLOC_ARRAY(store, 1);
|
||||||
store->odb = odb;
|
store->odb = odb;
|
||||||
|
INIT_LIST_HEAD(&store->mru);
|
||||||
hashmap_init(&store->map, pack_map_entry_cmp, NULL, 0);
|
hashmap_init(&store->map, pack_map_entry_cmp, NULL, 0);
|
||||||
return store;
|
return store;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,9 @@ struct packfile_store {
|
|||||||
*/
|
*/
|
||||||
struct packed_git *packs;
|
struct packed_git *packs;
|
||||||
|
|
||||||
|
/* A most-recently-used ordered version of the packs list. */
|
||||||
|
struct list_head mru;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A map of packfile names to packed_git structs for tracking which
|
* A map of packfile names to packed_git structs for tracking which
|
||||||
* packs have been loaded already.
|
* packs have been loaded already.
|
||||||
|
|||||||
Reference in New Issue
Block a user