Its rare that we should exceed deltaBaseCacheLimit while resolving delta compressed objects. By default this limit is 16M, and most chains are under 50 objects in length. This affords about 327K per object in the chain, which is quite large by source code standards. If we have to recreate a prior delta base because we evicted it to stay within the deltaBaseCacheLimit we can warn the user that their configured limit is perhaps too low for this repository data set. If the user keeps seeing the warning they can research it in the documentation, and consider setting it higher on this repository, or just globally on their system. Suggested-by: Stephan Hennig <mailing_list@xxxxxxxx> Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- index-pack.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/index-pack.c b/index-pack.c index ac20a46..97533d6 100644 --- a/index-pack.c +++ b/index-pack.c @@ -53,6 +53,7 @@ static struct object_entry *objects; static struct delta_entry *deltas; static struct base_data *base_cache; static size_t base_cache_used; +static int oom_warning; static int nr_objects; static int nr_deltas; static int nr_resolved_deltas; @@ -481,6 +482,13 @@ static void *get_base_data(struct base_data *c) if (!c->data) { struct object_entry *obj = c->obj; + if (!oom_warning && verbose) { + if (progress) + fputc('\n', stderr); + warning("One or more delta chains are larger than deltaBaseCache."); + oom_warning = 1; + } + if (obj->type == OBJ_REF_DELTA || obj->type == OBJ_OFS_DELTA) { void *base = get_base_data(c->base); void *raw = get_data_from_pack(obj); -- 1.5.6.3.569.ga9185 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html