]> git.ipfire.org Git - thirdparty/git.git/commit - t/t4216-log-bloom.sh
builtin/commit-graph.c: introduce '--max-new-filters=<n>'
authorTaylor Blau <me@ttaylorr.com>
Fri, 18 Sep 2020 13:27:27 +0000 (09:27 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 18 Sep 2020 17:35:39 +0000 (10:35 -0700)
commit809e0327f579267ea78a1b2f727d3b63c1f5d044
tree4881730cb7cdf45c8bd2c45a505fd3cbadf6e3df
parent98bb796191f7234c88b7a97f587d37ffbd130289
builtin/commit-graph.c: introduce '--max-new-filters=<n>'

Introduce a command-line flag to specify the maximum number of new Bloom
filters that a 'git commit-graph write' is willing to compute from
scratch.

Prior to this patch, a commit-graph write with '--changed-paths' would
compute Bloom filters for all selected commits which haven't already
been computed (i.e., by a previous commit-graph write with '--split'
such that a roll-up or replacement is performed).

This behavior can cause prohibitively-long commit-graph writes for a
variety of reasons:

  * There may be lots of filters whose diffs take a long time to
    generate (for example, they have close to the maximum number of
    changes, diffing itself takes a long time, etc).

  * Old-style commit-graphs (which encode filters with too many entries
    as not having been computed at all) cause us to waste time
    recomputing filters that appear to have not been computed only to
    discover that they are too-large.

This can make the upper-bound of the time it takes for 'git commit-graph
write --changed-paths' to be rather unpredictable.

To make this command behave more predictably, introduce
'--max-new-filters=<n>' to allow computing at most '<n>' Bloom filters
from scratch. This lets "computing" already-known filters proceed
quickly, while bounding the number of slow tasks that Git is willing to
do.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-commit-graph.txt
bloom.c
builtin/commit-graph.c
commit-graph.c
commit-graph.h
t/t4216-log-bloom.sh