Merge branch 'sb/object-store'
Refactoring the internal global data structure to make it possible to open multiple repositories, work with and then close them. Rerolled by Duy on top of a separate preliminary clean-up topic. The resulting structure of the topics looked very sensible. * sb/object-store: (27 commits) sha1_file: allow sha1_loose_object_info to handle arbitrary repositories sha1_file: allow map_sha1_file to handle arbitrary repositories sha1_file: allow map_sha1_file_1 to handle arbitrary repositories sha1_file: allow open_sha1_file to handle arbitrary repositories sha1_file: allow stat_sha1_file to handle arbitrary repositories sha1_file: allow sha1_file_name to handle arbitrary repositories sha1_file: add repository argument to sha1_loose_object_info sha1_file: add repository argument to map_sha1_file sha1_file: add repository argument to map_sha1_file_1 sha1_file: add repository argument to open_sha1_file sha1_file: add repository argument to stat_sha1_file sha1_file: add repository argument to sha1_file_name sha1_file: allow prepare_alt_odb to handle arbitrary repositories sha1_file: allow link_alt_odb_entries to handle arbitrary repositories sha1_file: add repository argument to prepare_alt_odb sha1_file: add repository argument to link_alt_odb_entries sha1_file: add repository argument to read_info_alternates sha1_file: add repository argument to link_alt_odb_entry sha1_file: add raw_object_store argument to alt_odb_usable pack: move approximate object count to object store ...
This commit is contained in:
42
object.c
42
object.c
@ -4,6 +4,8 @@
|
||||
#include "tree.h"
|
||||
#include "commit.h"
|
||||
#include "tag.h"
|
||||
#include "object-store.h"
|
||||
#include "packfile.h"
|
||||
|
||||
static struct object **obj_hash;
|
||||
static int nr_objs, obj_hash_size;
|
||||
@ -445,3 +447,43 @@ void clear_commit_marks_all(unsigned int flags)
|
||||
obj->flags &= ~flags;
|
||||
}
|
||||
}
|
||||
|
||||
struct raw_object_store *raw_object_store_new(void)
|
||||
{
|
||||
struct raw_object_store *o = xmalloc(sizeof(*o));
|
||||
|
||||
memset(o, 0, sizeof(*o));
|
||||
INIT_LIST_HEAD(&o->packed_git_mru);
|
||||
return o;
|
||||
}
|
||||
|
||||
static void free_alt_odb(struct alternate_object_database *alt)
|
||||
{
|
||||
strbuf_release(&alt->scratch);
|
||||
oid_array_clear(&alt->loose_objects_cache);
|
||||
free(alt);
|
||||
}
|
||||
|
||||
static void free_alt_odbs(struct raw_object_store *o)
|
||||
{
|
||||
while (o->alt_odb_list) {
|
||||
struct alternate_object_database *next;
|
||||
|
||||
next = o->alt_odb_list->next;
|
||||
free_alt_odb(o->alt_odb_list);
|
||||
o->alt_odb_list = next;
|
||||
}
|
||||
}
|
||||
|
||||
void raw_object_store_clear(struct raw_object_store *o)
|
||||
{
|
||||
FREE_AND_NULL(o->objectdir);
|
||||
FREE_AND_NULL(o->alternate_db);
|
||||
|
||||
free_alt_odbs(o);
|
||||
o->alt_odb_tail = NULL;
|
||||
|
||||
INIT_LIST_HEAD(&o->packed_git_mru);
|
||||
close_all_packs(o);
|
||||
o->packed_git = NULL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user