Merge branch 'nd/pack-objects-pack-struct'
"git pack-objects" needs to allocate tons of "struct object_entry" while doing its work, and shrinking its size helps the performance quite a bit. * nd/pack-objects-pack-struct: ci: exercise the whole test suite with uncommon code in pack-objects pack-objects: reorder members to shrink struct object_entry pack-objects: shrink delta_size field in struct object_entry pack-objects: shrink size field in struct object_entry pack-objects: clarify the use of object_entry::size pack-objects: don't check size when the object is bad pack-objects: shrink z_delta_size field in struct object_entry pack-objects: refer to delta objects by index instead of pointer pack-objects: move in_pack out of struct object_entry pack-objects: move in_pack_pos out of struct object_entry pack-objects: use bitfield for object_entry::depth pack-objects: use bitfield for object_entry::dfs_state pack-objects: turn type and in_pack_type to bitfields pack-objects: a bit of document about struct object_entry read-cache.c: make $GIT_TEST_SPLIT_INDEX boolean
This commit is contained in:
@@ -48,7 +48,8 @@ void bitmap_writer_show_progress(int show)
|
||||
/**
|
||||
* Build the initial type index for the packfile
|
||||
*/
|
||||
void bitmap_writer_build_type_index(struct pack_idx_entry **index,
|
||||
void bitmap_writer_build_type_index(struct packing_data *to_pack,
|
||||
struct pack_idx_entry **index,
|
||||
uint32_t index_nr)
|
||||
{
|
||||
uint32_t i;
|
||||
@@ -57,19 +58,20 @@ void bitmap_writer_build_type_index(struct pack_idx_entry **index,
|
||||
writer.trees = ewah_new();
|
||||
writer.blobs = ewah_new();
|
||||
writer.tags = ewah_new();
|
||||
ALLOC_ARRAY(to_pack->in_pack_pos, to_pack->nr_objects);
|
||||
|
||||
for (i = 0; i < index_nr; ++i) {
|
||||
struct object_entry *entry = (struct object_entry *)index[i];
|
||||
enum object_type real_type;
|
||||
|
||||
entry->in_pack_pos = i;
|
||||
oe_set_in_pack_pos(to_pack, entry, i);
|
||||
|
||||
switch (entry->type) {
|
||||
switch (oe_type(entry)) {
|
||||
case OBJ_COMMIT:
|
||||
case OBJ_TREE:
|
||||
case OBJ_BLOB:
|
||||
case OBJ_TAG:
|
||||
real_type = entry->type;
|
||||
real_type = oe_type(entry);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -98,7 +100,7 @@ void bitmap_writer_build_type_index(struct pack_idx_entry **index,
|
||||
default:
|
||||
die("Missing type information for %s (%d/%d)",
|
||||
oid_to_hex(&entry->idx.oid), real_type,
|
||||
entry->type);
|
||||
oe_type(entry));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -147,7 +149,7 @@ static uint32_t find_object_pos(const unsigned char *sha1)
|
||||
"(object %s is missing)", sha1_to_hex(sha1));
|
||||
}
|
||||
|
||||
return entry->in_pack_pos;
|
||||
return oe_in_pack_pos(writer.to_pack, entry);
|
||||
}
|
||||
|
||||
static void show_object(struct object *object, const char *name, void *data)
|
||||
|
||||
Reference in New Issue
Block a user