From: Garima Singh <garima.singh@xxxxxxxxxxxxx> When computing changed-path Bloom filters or performing a name-only diff, we do not need the blob contents before completing the diff values. Thus, we do not need to download a pack containing the blobs we do not have on-disk before completing our diff calculation. This prevents downloading every blob in a partial clone when computing changed path Bloom filters. It also prevents over-aggressive downloads during "git log --raw" commands. Signed-off-by: Derrick Stolee <dstolee@xxxxxxxxxxxxx> Signed-off-by: Garima Singh <garima.singh@xxxxxxxxxxxxx> --- bloom.c | 1 + diff.c | 8 +++++++- diff.h | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/bloom.c b/bloom.c index a16eee92331..dbcf594baec 100644 --- a/bloom.c +++ b/bloom.c @@ -142,6 +142,7 @@ struct bloom_filter *get_bloom_filter(struct repository *r, repo_diff_setup(r, &diffopt); diffopt.flags.recursive = 1; + diffopt.detect_rename = 0; diffopt.max_changes = max_changes; diff_setup_done(&diffopt); diff --git a/diff.c b/diff.c index 1010d806f50..63376adb011 100644 --- a/diff.c +++ b/diff.c @@ -4633,6 +4633,10 @@ void diff_setup_done(struct diff_options *options) if (!options->use_color || external_diff()) options->color_moved = 0; + if (!(options->output_format & ~(DIFF_FORMAT_NAME | DIFF_FORMAT_RAW)) && + !options->detect_rename) + options->skip_batch_download_objects = 1; + FREE_AND_NULL(options->parseopts); } @@ -6507,7 +6511,9 @@ static void add_if_missing(struct repository *r, void diffcore_std(struct diff_options *options) { - if (options->repo == the_repository && has_promisor_remote()) { + if (!options->skip_batch_download_objects && + options->repo == the_repository && + has_promisor_remote()) { /* * Prefetch the diff pairs that are about to be flushed. */ diff --git a/diff.h b/diff.h index 9443dc1b003..e9f104309c4 100644 --- a/diff.h +++ b/diff.h @@ -281,6 +281,7 @@ struct diff_options { int show_rename_progress; int dirstat_permille; int setup; + int skip_batch_download_objects; /* Number of hexdigits to abbreviate raw format output to. */ int abbrev; -- gitgitgadget