]> git.ipfire.org Git - thirdparty/git.git/commitdiff
midx-write.c: extract `should_include_pack()`
authorTaylor Blau <me@ttaylorr.com>
Wed, 29 May 2024 22:55:32 +0000 (18:55 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 30 May 2024 20:43:51 +0000 (13:43 -0700)
The add_pack_to_midx() callback used via for_each_file_in_pack_dir() is
used to add packs with .idx files to the MIDX being written.

Within this function, we have a pair of checks that discards packs
which:

  - appear in an existing MIDX, if we successfully read an existing MIDX
    from disk

  - or, appear in the "to_include" list, if invoking the MIDX write
    machinery with the `--stdin-packs` command-line argument.

A future commit will want to call a slight variant of these checks from
the code that reuses all packs from an existing MIDX, as well as the
current location via add_pack_to_midx(). The latter will be modified in
subsequent commits to only reuse packs which appear in the to_include
list, if one was given.

Prepare for that step by extracting these checks as a subroutine that
may be called from both places.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
midx-write.c

index 3cf4b5e0e23a7e1a8c85e49a0d7be5780fd29d1c..436a8703365ea50c652759c4a5556bab02a73a0c 100644 (file)
@@ -100,6 +100,32 @@ struct write_midx_context {
        struct string_list *to_include;
 };
 
+static int should_include_pack(const struct write_midx_context *ctx,
+                              const char *file_name)
+{
+       /*
+        * Note that at most one of ctx->m and ctx->to_include are set,
+        * so we are testing midx_contains_pack() and
+        * string_list_has_string() independently (guarded by the
+        * appropriate NULL checks).
+        *
+        * We could support passing to_include while reusing an existing
+        * MIDX, but don't currently since the reuse process drags
+        * forward all packs from an existing MIDX (without checking
+        * whether or not they appear in the to_include list).
+        *
+        * If we added support for that, these next two conditional
+        * should be performed independently (likely checking
+        * to_include before the existing MIDX).
+        */
+       if (ctx->m && midx_contains_pack(ctx->m, file_name))
+               return 0;
+       else if (ctx->to_include &&
+                !string_list_has_string(ctx->to_include, file_name))
+               return 0;
+       return 1;
+}
+
 static void add_pack_to_midx(const char *full_path, size_t full_path_len,
                             const char *file_name, void *data)
 {
@@ -108,29 +134,11 @@ static void add_pack_to_midx(const char *full_path, size_t full_path_len,
 
        if (ends_with(file_name, ".idx")) {
                display_progress(ctx->progress, ++ctx->pack_paths_checked);
-               /*
-                * Note that at most one of ctx->m and ctx->to_include are set,
-                * so we are testing midx_contains_pack() and
-                * string_list_has_string() independently (guarded by the
-                * appropriate NULL checks).
-                *
-                * We could support passing to_include while reusing an existing
-                * MIDX, but don't currently since the reuse process drags
-                * forward all packs from an existing MIDX (without checking
-                * whether or not they appear in the to_include list).
-                *
-                * If we added support for that, these next two conditional
-                * should be performed independently (likely checking
-                * to_include before the existing MIDX).
-                */
-               if (ctx->m && midx_contains_pack(ctx->m, file_name))
-                       return;
-               else if (ctx->to_include &&
-                        !string_list_has_string(ctx->to_include, file_name))
+
+               if (!should_include_pack(ctx, file_name))
                        return;
 
                ALLOC_GROW(ctx->info, ctx->nr + 1, ctx->alloc);
-
                p = add_packed_git(full_path, full_path_len, 0);
                if (!p) {
                        warning(_("failed to add packfile '%s'"),