mirror of
https://github.com/git-for-windows/git.git
synced 2026-06-14 15:01:15 -05:00
odb/source-packed: store pointer to "files" instead of generic source
The `struct odb_source_packed` holds a pointer to its owning parent source. The way that Git is currently structured, this parent is always the "files" source. In subsequent commits we're going to detangle that so that the "packed" source doesn't have any owning parent source at all, which makes it usable as a completely standalone source. Detangling this mess is somewhat intricate though, and is made even more intricate because it's not always clear which kind of source one is holding at a specific point in time -- either the parent "files" source, or the child "packed" source. Make this relationship more explicit by storing a pointer to the "files" source instead of storing a pointer to a generic `struct odb_source`. This will help make subsequent steps a bit clearer. Note that this is a temporary step, only. At the end of this series we will have dropped the parent pointer completely. 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
8742ff8368
commit
ef25514fe6
@@ -269,7 +269,7 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
|
||||
CALLOC_ARRAY(files, 1);
|
||||
odb_source_init(&files->base, odb, ODB_SOURCE_FILES, path, local);
|
||||
files->loose = odb_source_loose_new(odb, path, local);
|
||||
files->packed = odb_source_packed_new(&files->base);
|
||||
files->packed = odb_source_packed_new(files);
|
||||
|
||||
files->base.free = odb_source_files_free;
|
||||
files->base.close = odb_source_files_close;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#include "git-compat-util.h"
|
||||
#include "odb/source-packed.h"
|
||||
|
||||
struct odb_source_packed *odb_source_packed_new(struct odb_source *source)
|
||||
struct odb_source_packed *odb_source_packed_new(struct odb_source_files *parent)
|
||||
{
|
||||
struct odb_source_packed *store;
|
||||
CALLOC_ARRAY(store, 1);
|
||||
store->source = source;
|
||||
store->files = parent;
|
||||
strmap_init(&store->packs_by_path);
|
||||
return store;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* A store that manages packfiles for a given object database.
|
||||
*/
|
||||
struct odb_source_packed {
|
||||
struct odb_source *source;
|
||||
struct odb_source_files *files;
|
||||
|
||||
/*
|
||||
* The list of packfiles in the order in which they have been most
|
||||
@@ -67,6 +67,6 @@ struct odb_source_packed {
|
||||
* Allocate and initialize a new empty packfile store for the given object
|
||||
* database source.
|
||||
*/
|
||||
struct odb_source_packed *odb_source_packed_new(struct odb_source *source);
|
||||
struct odb_source_packed *odb_source_packed_new(struct odb_source_files *parent);
|
||||
|
||||
#endif
|
||||
|
||||
12
packfile.c
12
packfile.c
@@ -802,7 +802,7 @@ struct packed_git *packfile_store_load_pack(struct odb_source_packed *store,
|
||||
|
||||
p = strmap_get(&store->packs_by_path, key.buf);
|
||||
if (!p) {
|
||||
p = add_packed_git(store->source->odb->repo, idx_path,
|
||||
p = add_packed_git(store->files->base.odb->repo, idx_path,
|
||||
strlen(idx_path), local);
|
||||
if (p)
|
||||
packfile_store_add_pack(store, p);
|
||||
@@ -990,8 +990,8 @@ void packfile_store_prepare(struct odb_source_packed *store)
|
||||
if (store->initialized)
|
||||
return;
|
||||
|
||||
prepare_multi_pack_index_one(store->source);
|
||||
prepare_packed_git_one(store->source);
|
||||
prepare_multi_pack_index_one(&store->files->base);
|
||||
prepare_packed_git_one(&store->files->base);
|
||||
|
||||
sort_packs(&store->packs.head, sort_pack);
|
||||
for (struct packfile_list_entry *e = store->packs.head; e; e = e->next)
|
||||
@@ -1029,7 +1029,7 @@ int packfile_store_count_objects(struct odb_source_packed *store,
|
||||
unsigned long count = 0;
|
||||
int ret;
|
||||
|
||||
m = get_multi_pack_index(store->source);
|
||||
m = get_multi_pack_index(&store->files->base);
|
||||
if (m)
|
||||
count += m->num_objects + m->num_objects_in_base;
|
||||
|
||||
@@ -2450,7 +2450,7 @@ static int packfile_store_for_each_prefixed_object(
|
||||
|
||||
store->skip_mru_updates = true;
|
||||
|
||||
m = get_multi_pack_index(store->source);
|
||||
m = get_multi_pack_index(&store->files->base);
|
||||
if (m) {
|
||||
ret = for_each_prefixed_object_in_midx(store, m, opts, data);
|
||||
if (ret)
|
||||
@@ -2632,7 +2632,7 @@ int packfile_store_find_abbrev_len(struct odb_source_packed *store,
|
||||
struct packfile_list_entry *e;
|
||||
struct multi_pack_index *m;
|
||||
|
||||
m = get_multi_pack_index(store->source);
|
||||
m = get_multi_pack_index(&store->files->base);
|
||||
if (m)
|
||||
find_abbrev_len_for_midx(m, oid, min_len, &min_len);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user