v6 fixes the one optimization that I just couldn't get right, fixes two off-by-one error messages and a couple commit message update (biggest change is in 11/11 to record some numbers from AEvar) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index fb2aba80bf..4406af640f 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -3112,10 +3112,10 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) if (depth >= (1 << OE_DEPTH_BITS)) die(_("delta chain depth %d is greater than maximum limit %d"), - depth, (1 << OE_DEPTH_BITS)); + depth, (1 << OE_DEPTH_BITS) - 1); if (cache_max_small_delta_size >= (1 << OE_Z_DELTA_BITS)) die(_("pack.deltaCacheLimit is greater than maximum limit %d"), - 1 << OE_Z_DELTA_BITS); + (1 << OE_Z_DELTA_BITS) - 1); argv_array_push(&rp, "pack-objects"); if (thin) { diff --git a/pack-objects.h b/pack-objects.h index 55358da9f3..af40211105 100644 --- a/pack-objects.h +++ b/pack-objects.h @@ -275,7 +275,7 @@ static inline unsigned long oe_size(const struct object_entry *e) } } -static inline int contains_in_32bits(unsigned long limit) +static inline int oe_fits_in_32bits(unsigned long limit) { uint32_t truncated_limit = (uint32_t)limit; @@ -287,8 +287,8 @@ static inline int oe_size_less_than(const struct object_entry *e, { if (e->size_valid) return e->size_ < limit; - if (contains_in_32bits(limit)) - return 1; + if (oe_fits_in_32bits(limit)) /* limit < 2^32 <= size ? */ + return 0; return oe_size(e) < limit; } @@ -297,8 +297,8 @@ static inline int oe_size_greater_than(const struct object_entry *e, { if (e->size_valid) return e->size_ > limit; - if (contains_in_32bits(limit)) - return 0; + if (oe_fits_in_32bits(limit)) /* limit < 2^32 <= size ? */ + return 1; return oe_size(e) > limit; } @@ -307,6 +307,14 @@ static inline void oe_set_size(struct object_entry *e, { e->size_ = size; e->size_valid = e->size_ == size; + + if (!e->size_valid) { + unsigned long real_size; + + if (sha1_object_info(e->idx.oid.hash, &real_size) < 0 || + size != real_size) + die("BUG: 'size' is supposed to be the object size!"); + } } static inline unsigned long oe_delta_size(struct packing_data *pack, -- 2.17.0.rc0.347.gf9cf61673a