mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
pack-objects: refactor code into compute_layer_order()
In a following commit, as we will use delta islands, we will have to compute the write order for different layers, not just for one. Let's prepare for that by refactoring the code that will be used to compute the write order for a given layer into a new compute_layer_order() function. This will make it easier to see and understand what the following changes are doing. Helped-by: Duy Nguyen <pclouds@gmail.com> Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
c8d521faf7
commit
f64ba53ee7
|
@ -667,9 +667,57 @@ static void add_family_to_write_order(struct object_entry **wo,
|
|||
add_descendants_to_write_order(wo, endp, root);
|
||||
}
|
||||
|
||||
static void compute_layer_order(struct object_entry **wo, unsigned int *wo_end)
|
||||
{
|
||||
unsigned int i, last_untagged;
|
||||
struct object_entry *objects = to_pack.objects;
|
||||
|
||||
for (i = 0; i < to_pack.nr_objects; i++) {
|
||||
if (objects[i].tagged)
|
||||
break;
|
||||
add_to_write_order(wo, wo_end, &objects[i]);
|
||||
}
|
||||
last_untagged = i;
|
||||
|
||||
/*
|
||||
* Then fill all the tagged tips.
|
||||
*/
|
||||
for (; i < to_pack.nr_objects; i++) {
|
||||
if (objects[i].tagged)
|
||||
add_to_write_order(wo, wo_end, &objects[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* And then all remaining commits and tags.
|
||||
*/
|
||||
for (i = last_untagged; i < to_pack.nr_objects; i++) {
|
||||
if (oe_type(&objects[i]) != OBJ_COMMIT &&
|
||||
oe_type(&objects[i]) != OBJ_TAG)
|
||||
continue;
|
||||
add_to_write_order(wo, wo_end, &objects[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* And then all the trees.
|
||||
*/
|
||||
for (i = last_untagged; i < to_pack.nr_objects; i++) {
|
||||
if (oe_type(&objects[i]) != OBJ_TREE)
|
||||
continue;
|
||||
add_to_write_order(wo, wo_end, &objects[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Finally all the rest in really tight order
|
||||
*/
|
||||
for (i = last_untagged; i < to_pack.nr_objects; i++) {
|
||||
if (!objects[i].filled)
|
||||
add_family_to_write_order(wo, wo_end, &objects[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static struct object_entry **compute_write_order(void)
|
||||
{
|
||||
unsigned int i, wo_end, last_untagged;
|
||||
unsigned int i, wo_end;
|
||||
|
||||
struct object_entry **wo;
|
||||
struct object_entry *objects = to_pack.objects;
|
||||
|
@ -705,47 +753,9 @@ static struct object_entry **compute_write_order(void)
|
|||
* we see a tagged tip.
|
||||
*/
|
||||
ALLOC_ARRAY(wo, to_pack.nr_objects);
|
||||
for (i = wo_end = 0; i < to_pack.nr_objects; i++) {
|
||||
if (objects[i].tagged)
|
||||
break;
|
||||
add_to_write_order(wo, &wo_end, &objects[i]);
|
||||
}
|
||||
last_untagged = i;
|
||||
wo_end = 0;
|
||||
|
||||
/*
|
||||
* Then fill all the tagged tips.
|
||||
*/
|
||||
for (; i < to_pack.nr_objects; i++) {
|
||||
if (objects[i].tagged)
|
||||
add_to_write_order(wo, &wo_end, &objects[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* And then all remaining commits and tags.
|
||||
*/
|
||||
for (i = last_untagged; i < to_pack.nr_objects; i++) {
|
||||
if (oe_type(&objects[i]) != OBJ_COMMIT &&
|
||||
oe_type(&objects[i]) != OBJ_TAG)
|
||||
continue;
|
||||
add_to_write_order(wo, &wo_end, &objects[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* And then all the trees.
|
||||
*/
|
||||
for (i = last_untagged; i < to_pack.nr_objects; i++) {
|
||||
if (oe_type(&objects[i]) != OBJ_TREE)
|
||||
continue;
|
||||
add_to_write_order(wo, &wo_end, &objects[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Finally all the rest in really tight order
|
||||
*/
|
||||
for (i = last_untagged; i < to_pack.nr_objects; i++) {
|
||||
if (!objects[i].filled)
|
||||
add_family_to_write_order(wo, &wo_end, &objects[i]);
|
||||
}
|
||||
compute_layer_order(wo, &wo_end);
|
||||
|
||||
if (wo_end != to_pack.nr_objects)
|
||||
die("ordered %u objects, expected %"PRIu32, wo_end, to_pack.nr_objects);
|
||||
|
|
Loading…
Reference in a new issue