pack-objects: move in_pack_pos out of struct object_entry
This field is only need for pack-bitmap, which is an optional feature. Move it to a separate array that is only allocated when pack-bitmap is used (like objects[], it is not freed, since we need it until the end of the process) Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
b5c0cbd808
commit
06af3bba41
@ -879,7 +879,8 @@ static void write_pack_file(void)
|
|||||||
|
|
||||||
if (write_bitmap_index) {
|
if (write_bitmap_index) {
|
||||||
bitmap_writer_set_checksum(oid.hash);
|
bitmap_writer_set_checksum(oid.hash);
|
||||||
bitmap_writer_build_type_index(written_list, nr_written);
|
bitmap_writer_build_type_index(
|
||||||
|
&to_pack, written_list, nr_written);
|
||||||
}
|
}
|
||||||
|
|
||||||
finish_tmp_packfile(&tmpname, pack_tmp_name,
|
finish_tmp_packfile(&tmpname, pack_tmp_name,
|
||||||
|
|||||||
@ -48,7 +48,8 @@ void bitmap_writer_show_progress(int show)
|
|||||||
/**
|
/**
|
||||||
* Build the initial type index for the packfile
|
* 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 index_nr)
|
||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
@ -57,12 +58,13 @@ void bitmap_writer_build_type_index(struct pack_idx_entry **index,
|
|||||||
writer.trees = ewah_new();
|
writer.trees = ewah_new();
|
||||||
writer.blobs = ewah_new();
|
writer.blobs = ewah_new();
|
||||||
writer.tags = ewah_new();
|
writer.tags = ewah_new();
|
||||||
|
ALLOC_ARRAY(to_pack->in_pack_pos, to_pack->nr_objects);
|
||||||
|
|
||||||
for (i = 0; i < index_nr; ++i) {
|
for (i = 0; i < index_nr; ++i) {
|
||||||
struct object_entry *entry = (struct object_entry *)index[i];
|
struct object_entry *entry = (struct object_entry *)index[i];
|
||||||
enum object_type real_type;
|
enum object_type real_type;
|
||||||
|
|
||||||
entry->in_pack_pos = i;
|
oe_set_in_pack_pos(to_pack, entry, i);
|
||||||
|
|
||||||
switch (oe_type(entry)) {
|
switch (oe_type(entry)) {
|
||||||
case OBJ_COMMIT:
|
case OBJ_COMMIT:
|
||||||
@ -146,7 +148,7 @@ static uint32_t find_object_pos(const unsigned char *sha1)
|
|||||||
"(object %s is missing)", sha1_to_hex(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)
|
static void show_object(struct object *object, const char *name, void *data)
|
||||||
|
|||||||
@ -1033,7 +1033,7 @@ int rebuild_existing_bitmaps(struct packing_data *mapping,
|
|||||||
oe = packlist_find(mapping, sha1, NULL);
|
oe = packlist_find(mapping, sha1, NULL);
|
||||||
|
|
||||||
if (oe)
|
if (oe)
|
||||||
reposition[i] = oe->in_pack_pos + 1;
|
reposition[i] = oe_in_pack_pos(mapping, oe) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rebuild = bitmap_new();
|
rebuild = bitmap_new();
|
||||||
|
|||||||
@ -44,7 +44,9 @@ int rebuild_existing_bitmaps(struct packing_data *mapping, khash_sha1 *reused_bi
|
|||||||
|
|
||||||
void bitmap_writer_show_progress(int show);
|
void bitmap_writer_show_progress(int show);
|
||||||
void bitmap_writer_set_checksum(unsigned char *sha1);
|
void bitmap_writer_set_checksum(unsigned char *sha1);
|
||||||
void bitmap_writer_build_type_index(struct pack_idx_entry **index, uint32_t index_nr);
|
void bitmap_writer_build_type_index(struct packing_data *to_pack,
|
||||||
|
struct pack_idx_entry **index,
|
||||||
|
uint32_t index_nr);
|
||||||
void bitmap_writer_reuse_bitmaps(struct packing_data *to_pack);
|
void bitmap_writer_reuse_bitmaps(struct packing_data *to_pack);
|
||||||
void bitmap_writer_select_commits(struct commit **indexed_commits,
|
void bitmap_writer_select_commits(struct commit **indexed_commits,
|
||||||
unsigned int indexed_commits_nr, int max_bitmaps);
|
unsigned int indexed_commits_nr, int max_bitmaps);
|
||||||
|
|||||||
@ -79,7 +79,6 @@ struct object_entry {
|
|||||||
unsigned in_pack_type:TYPE_BITS; /* could be delta */
|
unsigned in_pack_type:TYPE_BITS; /* could be delta */
|
||||||
unsigned type_valid:1;
|
unsigned type_valid:1;
|
||||||
uint32_t hash; /* name hint hash */
|
uint32_t hash; /* name hint hash */
|
||||||
unsigned int in_pack_pos;
|
|
||||||
unsigned char in_pack_header_size;
|
unsigned char in_pack_header_size;
|
||||||
unsigned preferred_base:1; /*
|
unsigned preferred_base:1; /*
|
||||||
* we do not pack this, but is available
|
* we do not pack this, but is available
|
||||||
@ -99,6 +98,8 @@ struct packing_data {
|
|||||||
|
|
||||||
int32_t *index;
|
int32_t *index;
|
||||||
uint32_t index_size;
|
uint32_t index_size;
|
||||||
|
|
||||||
|
unsigned int *in_pack_pos;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct object_entry *packlist_alloc(struct packing_data *pdata,
|
struct object_entry *packlist_alloc(struct packing_data *pdata,
|
||||||
@ -144,4 +145,17 @@ static inline void oe_set_type(struct object_entry *e,
|
|||||||
e->type_ = (unsigned)type;
|
e->type_ = (unsigned)type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned int oe_in_pack_pos(const struct packing_data *pack,
|
||||||
|
const struct object_entry *e)
|
||||||
|
{
|
||||||
|
return pack->in_pack_pos[e - pack->objects];
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void oe_set_in_pack_pos(const struct packing_data *pack,
|
||||||
|
const struct object_entry *e,
|
||||||
|
unsigned int pos)
|
||||||
|
{
|
||||||
|
pack->in_pack_pos[e - pack->objects] = pos;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user