]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fetch-pack: expose fsckObjects configuration logic
authorXing Xin <xingxin.xx@bytedance.com>
Wed, 19 Jun 2024 04:07:32 +0000 (04:07 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 20 Jun 2024 17:30:07 +0000 (10:30 -0700)
Currently, we can use "transfer.fsckObjects" and the more specific
"fetch.fsckObjects" to control checks for broken objects in received
packs during fetches. However, these configurations were only
acknowledged by `fetch-pack.c:get_pack` and did not take effect in
direct bundle fetches or fetches with _bundle-uri_ enabled.

This commit exposes the fetch-then-transfer configuration logic by
adding a new function `fetch_pack_fsck_objects` in fetch-pack.h. This
new function is used to replace the assignment for `fsck_objects` in
`fetch-pack.c:get_pack`. In the next commit, this function will also be
used to extend fsck support for bundle-involved fetches.

Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Xing Xin <xingxin.xx@bytedance.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fetch-pack.c
fetch-pack.h

index eba9e420ea69b8bbebe2c53127a48950e1008dab..ca77dbd1462e83b54308df37987fc6e214da1f1d 100644 (file)
@@ -954,12 +954,7 @@ static int get_pack(struct fetch_pack_args *args,
                strvec_push(&cmd.args, alternate_shallow_file);
        }
 
-       if (fetch_fsck_objects >= 0
-           ? fetch_fsck_objects
-           : transfer_fsck_objects >= 0
-           ? transfer_fsck_objects
-           : 0)
-               fsck_objects = 1;
+       fsck_objects = fetch_pack_fsck_objects();
 
        if (do_keep || args->from_promisor || index_pack_args || fsck_objects) {
                if (pack_lockfiles || fsck_objects)
@@ -2046,6 +2041,16 @@ static const struct object_id *iterate_ref_map(void *cb_data)
        return &ref->old_oid;
 }
 
+int fetch_pack_fsck_objects(void)
+{
+       fetch_pack_setup();
+       if (fetch_fsck_objects >= 0)
+               return fetch_fsck_objects;
+       if (transfer_fsck_objects >= 0)
+               return transfer_fsck_objects;
+       return 0;
+}
+
 struct ref *fetch_pack(struct fetch_pack_args *args,
                       int fd[],
                       const struct ref *ref,
index 6775d265175748d2fccd2b9571c864a6ec091f20..b5c579cdae2508e216d78b3ff31e2207f0a44770 100644 (file)
@@ -101,4 +101,9 @@ void negotiate_using_fetch(const struct oid_array *negotiation_tips,
  */
 int report_unmatched_refs(struct ref **sought, int nr_sought);
 
+/*
+ * Return true if checks for broken objects in received pack are required.
+ */
+int fetch_pack_fsck_objects(void);
+
 #endif