pack-objects: extract should_attempt_deltas()

This will be helpful in a future change, which will reuse this logic.

Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Derrick Stolee 2025-05-16 18:11:51 +00:00 committed by Junio C Hamano
parent 87a0bdbf0f
commit 4bc0ba0829
1 changed files with 32 additions and 24 deletions

View File

@ -3196,6 +3196,36 @@ static int add_ref_tag(const char *tag UNUSED, const char *referent UNUSED, cons
return 0;
}

static int should_attempt_deltas(struct object_entry *entry)
{
if (DELTA(entry))
/* This happens if we decided to reuse existing
* delta from a pack. "reuse_delta &&" is implied.
*/
return 0;

if (!entry->type_valid ||
oe_size_less_than(&to_pack, entry, 50))
return 0;

if (entry->no_try_delta)
return 0;

if (!entry->preferred_base) {
if (oe_type(entry) < 0)
die(_("unable to get type of object %s"),
oid_to_hex(&entry->idx.oid));
} else if (oe_type(entry) < 0) {
/*
* This object is not found, but we
* don't have to include it anyway.
*/
return 0;
}

return 1;
}

static void prepare_pack(int window, int depth)
{
struct object_entry **delta_list;
@ -3226,33 +3256,11 @@ static void prepare_pack(int window, int depth)
for (i = 0; i < to_pack.nr_objects; i++) {
struct object_entry *entry = to_pack.objects + i;

if (DELTA(entry))
/* This happens if we decided to reuse existing
* delta from a pack. "reuse_delta &&" is implied.
*/
if (!should_attempt_deltas(entry))
continue;

if (!entry->type_valid ||
oe_size_less_than(&to_pack, entry, 50))
continue;

if (entry->no_try_delta)
continue;

if (!entry->preferred_base) {
if (!entry->preferred_base)
nr_deltas++;
if (oe_type(entry) < 0)
die(_("unable to get type of object %s"),
oid_to_hex(&entry->idx.oid));
} else {
if (oe_type(entry) < 0) {
/*
* This object is not found, but we
* don't have to include it anyway.
*/
continue;
}
}

delta_list[n++] = entry;
}