summaryrefslogtreecommitdiff
path: root/delta-islands.c
diff options
context:
space:
mode:
authorChristian Couder <christian.couder@gmail.com>2018-08-16 06:13:12 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-08-16 17:56:44 (GMT)
commit108f530385e969feab343b2b8acadeb7bb670009 (patch)
tree311cbc0c573fbb5fc0ef4d6697bb017f3752288f /delta-islands.c
parent9eb0986fa0b417911ed126e0d6d12028b9c2044f (diff)
downloadgit-108f530385e969feab343b2b8acadeb7bb670009.zip
git-108f530385e969feab343b2b8acadeb7bb670009.tar.gz
git-108f530385e969feab343b2b8acadeb7bb670009.tar.bz2
pack-objects: move tree_depth into 'struct packing_data'
This reduces the size of 'struct object_entry' and therefore makes packing objects more efficient. This also renames cmp_tree_depth() into tree_depth_compare(), as it is more modern to have the name of the compare functions end with "compare". Helped-by: Jeff King <peff@peff.net> Helped-by: Duy Nguyen <pclouds@gmail.com> Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'delta-islands.c')
-rw-r--r--delta-islands.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/delta-islands.c b/delta-islands.c
index e7123d4..b0b9157 100644
--- a/delta-islands.c
+++ b/delta-islands.c
@@ -224,17 +224,23 @@ static void mark_remote_island_1(struct remote_island *rl, int is_core_island)
island_counter++;
}
-static int cmp_tree_depth(const void *va, const void *vb)
+struct tree_islands_todo {
+ struct object_entry *entry;
+ unsigned int depth;
+};
+
+static int tree_depth_compare(const void *a, const void *b)
{
- struct object_entry *a = *(struct object_entry **)va;
- struct object_entry *b = *(struct object_entry **)vb;
- return a->tree_depth - b->tree_depth;
+ const struct tree_islands_todo *todo_a = a;
+ const struct tree_islands_todo *todo_b = b;
+
+ return todo_a->depth - todo_b->depth;
}
void resolve_tree_islands(int progress, struct packing_data *to_pack)
{
struct progress *progress_state = NULL;
- struct object_entry **todo;
+ struct tree_islands_todo *todo;
int nr = 0;
int i;
@@ -250,16 +256,19 @@ void resolve_tree_islands(int progress, struct packing_data *to_pack)
*/
ALLOC_ARRAY(todo, to_pack->nr_objects);
for (i = 0; i < to_pack->nr_objects; i++) {
- if (oe_type(&to_pack->objects[i]) == OBJ_TREE)
- todo[nr++] = &to_pack->objects[i];
+ if (oe_type(&to_pack->objects[i]) == OBJ_TREE) {
+ todo[nr].entry = &to_pack->objects[i];
+ todo[nr].depth = oe_tree_depth(to_pack, &to_pack->objects[i]);
+ nr++;
+ }
}
- QSORT(todo, nr, cmp_tree_depth);
+ QSORT(todo, nr, tree_depth_compare);
if (progress)
progress_state = start_progress(_("Propagating island marks"), nr);
for (i = 0; i < nr; i++) {
- struct object_entry *ent = todo[i];
+ struct object_entry *ent = todo[i].entry;
struct island_bitmap *root_marks;
struct tree *tree;
struct tree_desc desc;