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:
Junio C Hamano 2018-11-21 20:39:02 +09:00
commit 7fab474656
3 changed files with 6 additions and 3 deletions

View File

@ -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++;

View File

@ -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)) + \

View File

@ -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;
} }