Nguyễn Thái Ngọc Duy  <pclo...@gmail.com> writes:

> Instead of using 8 bytes (on 64 bit arch) to store a pointer to a
> pack. Use an index isntead since the number of packs should be
> relatively small.
>
> This limits the number of packs we can handle to 16k. For now if you hit
> 16k pack files limit, pack-objects will simply fail [1].
>
> This technically saves 7 bytes. But we don't see any of that in
> practice due to padding. The saving becomes real when we pack this
> struct tighter later.

Somehow 7 and 16k do not add up.

We use 8 bytes in the original code, and a solution that potentially
saves 7 bytes would use only 1 byte instead of the original 8, which
would allow us to index/identify 1<<8 == 256 packs, but for some reason
we can handle up to 16k.

> [1] The escape hatch is .keep file to limit the non-kept pack files
>     below 16k limit. Then you can go for another pack-objects run to
>     combine another 16k pack files. Repeat until you're satisfied.

;-)

> +static inline unsigned int oe_add_pack(struct packing_data *pack,
> +                                    struct packed_git *p)
> +{
> +     if (pack->in_pack_count >= (1 << OE_IN_PACK_BITS))
> +             die(_("too many packs to handle in one go. "
> +                   "Please add .keep files to exclude\n"
> +                   "some pack files and keep the number "
> +                   "of non-kept files below %d."),
> +                 1 << OE_IN_PACK_BITS);

OK.

Reply via email to