On Sat, Dec 17, 2016 at 03:55:36PM +0100, Christian Couder wrote:
> +static const int default_max_percent_split_change = 20;
> +
> +static int too_many_not_shared_entries(struct index_state *istate)
> +{
> +     int i, not_shared = 0;
> +     int max_split = git_config_get_max_percent_split_change();
> +
> +     switch (max_split) {
> +     case -1:
> +             /* not or badly configured: use the default value */
> +             max_split = default_max_percent_split_change;
> +             break;
> +     case 0:
> +             return 1; /* 0% means always write a new shared index */
> +     case 100:
> +             return 0; /* 100% means never write a new shared index */

I wonder if we really need to special case these here. If I read it
correctly, the expression at the end of this function will return 1
when max_split is 0, and 0 when max_split is 100 (not counting the
case when cache_nr is zero).

Perhaps it's good for documentation purpose. Though I find it hard to
see a use case for max_split == 0. Always creating a new shared index
sounds crazy.

> +     default:
> +             ; /* do nothing: just use the configured value */
> +     }
> +
> +     /* Count not shared entries */
> +     for (i = 0; i < istate->cache_nr; i++) {
> +             struct cache_entry *ce = istate->cache[i];
> +             if (!ce->index)
> +                     not_shared++;
> +     }
> +
> +     return istate->cache_nr * max_split < not_shared * 100;
> +}

Reply via email to