Merge branch 'cc/delta-islands'
A few issues in the implementation of "delta-islands" feature has been corrected. * cc/delta-islands: pack-objects: fix off-by-one in delta-island tree-depth computation pack-objects: zero-initialize tree_depth/layer arrays pack-objects: fix tree_depth and layer invariants
This commit is contained in:
commit
7fab474656
@ -2786,9 +2786,11 @@ static void show_object(struct object *obj, const char *name, void *data)
|
|||||||
|
|
||||||
if (use_delta_islands) {
|
if (use_delta_islands) {
|
||||||
const char *p;
|
const char *p;
|
||||||
unsigned depth = 0;
|
unsigned depth;
|
||||||
struct object_entry *ent;
|
struct object_entry *ent;
|
||||||
|
|
||||||
|
/* the empty string is a root tree, which is depth 0 */
|
||||||
|
depth = *name ? 1 : 0;
|
||||||
for (p = strchr(name, '/'); p; p = strchr(p + 1, '/'))
|
for (p = strchr(name, '/'); p; p = strchr(p + 1, '/'))
|
||||||
depth++;
|
depth++;
|
||||||
|
|
||||||
|
@ -861,6 +861,7 @@ extern FILE *fopen_or_warn(const char *path, const char *mode);
|
|||||||
#define FREE_AND_NULL(p) do { free(p); (p) = NULL; } while (0)
|
#define FREE_AND_NULL(p) do { free(p); (p) = NULL; } while (0)
|
||||||
|
|
||||||
#define ALLOC_ARRAY(x, alloc) (x) = xmalloc(st_mult(sizeof(*(x)), (alloc)))
|
#define ALLOC_ARRAY(x, alloc) (x) = xmalloc(st_mult(sizeof(*(x)), (alloc)))
|
||||||
|
#define CALLOC_ARRAY(x, alloc) (x) = xcalloc((alloc), sizeof(*(x)));
|
||||||
#define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), st_mult(sizeof(*(x)), (alloc)))
|
#define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), st_mult(sizeof(*(x)), (alloc)))
|
||||||
|
|
||||||
#define COPY_ARRAY(dst, src, n) copy_array((dst), (src), (n), sizeof(*(dst)) + \
|
#define COPY_ARRAY(dst, src, n) copy_array((dst), (src), (n), sizeof(*(dst)) + \
|
||||||
|
@ -412,7 +412,7 @@ static inline void oe_set_tree_depth(struct packing_data *pack,
|
|||||||
unsigned int tree_depth)
|
unsigned int tree_depth)
|
||||||
{
|
{
|
||||||
if (!pack->tree_depth)
|
if (!pack->tree_depth)
|
||||||
ALLOC_ARRAY(pack->tree_depth, pack->nr_objects);
|
CALLOC_ARRAY(pack->tree_depth, pack->nr_alloc);
|
||||||
pack->tree_depth[e - pack->objects] = tree_depth;
|
pack->tree_depth[e - pack->objects] = tree_depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -429,7 +429,7 @@ static inline void oe_set_layer(struct packing_data *pack,
|
|||||||
unsigned char layer)
|
unsigned char layer)
|
||||||
{
|
{
|
||||||
if (!pack->layer)
|
if (!pack->layer)
|
||||||
ALLOC_ARRAY(pack->layer, pack->nr_objects);
|
CALLOC_ARRAY(pack->layer, pack->nr_alloc);
|
||||||
pack->layer[e - pack->objects] = layer;
|
pack->layer[e - pack->objects] = layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user