]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-objects: extract should_attempt_deltas()
authorDerrick Stolee <stolee@gmail.com>
Fri, 16 May 2025 18:11:51 +0000 (18:11 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 16 May 2025 19:15:37 +0000 (12:15 -0700)
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>
builtin/pack-objects.c

index 58a9b1612626e0fca9c403b5ed9744d80757227e..7805429f5d1cb008c865848d5bc2259f63565467 100644 (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.
-                        */
-                       continue;
-
-               if (!entry->type_valid ||
-                   oe_size_less_than(&to_pack, entry, 50))
+               if (!should_attempt_deltas(entry))
                        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;
        }