mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
pack-objects: refactor path-walk delta phase
Previously, the --path-walk option to 'git pack-objects' would compute deltas inline with the path-walk logic. This would make the progress indicator look like it is taking a long time to enumerate objects, and then very quickly computed deltas. Instead of computing deltas on each region of objects organized by tree, store a list of regions corresponding to these groups. These can later be pulled from the list for delta compression before doing the "global" delta search. This presents a new progress indicator that can be used in tests to verify that this stage is happening. The current implementation is not integrated with threads, but we are setting it up to arrive in the next change. Since we do not attempt to sort objects by size until after exploring all trees, we can remove the previous change to t5530 due to a different error message appearing first. Signed-off-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
4933152cbb
commit
206a1bb203
@@ -119,11 +119,23 @@ struct object_entry {
|
||||
unsigned ext_base:1; /* delta_idx points outside packlist */
|
||||
};
|
||||
|
||||
/**
|
||||
* A packing region is a section of the packing_data.objects array
|
||||
* as given by a starting index and a number of elements.
|
||||
*/
|
||||
struct packing_region {
|
||||
size_t start;
|
||||
size_t nr;
|
||||
};
|
||||
|
||||
struct packing_data {
|
||||
struct repository *repo;
|
||||
struct object_entry *objects;
|
||||
uint32_t nr_objects, nr_alloc;
|
||||
|
||||
struct packing_region *regions;
|
||||
size_t nr_regions, nr_regions_alloc;
|
||||
|
||||
int32_t *index;
|
||||
uint32_t index_size;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user