]> git.ipfire.org Git - thirdparty/git.git/commitdiff
bundle: add bundle verification options type
authorJustin Tobler <jltobler@gmail.com>
Wed, 27 Nov 2024 23:33:09 +0000 (17:33 -0600)
committerJunio C Hamano <gitster@pobox.com>
Thu, 28 Nov 2024 03:07:57 +0000 (12:07 +0900)
When `unbundle()` is invoked, fsck verification may be configured by
passing the `VERIFY_BUNDLE_FSCK` flag. This mechanism allows fsck checks
on the bundle to be enabled or disabled entirely. To facilitate more
fine-grained fsck configuration, additional context must be provided to
`unbundle()`.

Introduce the `unbundle_opts` type, which wraps the existing
`verify_bundle_flags`, to facilitate future extension of `unbundle()`
configuration. Also update `unbundle()` and its call sites to accept
this new options type instead of the flags directly. The end behavior is
functionally the same, but allows for the set of configurable options to
be extended. This is leveraged in a subsequent commit to enable fsck
message severity configuration.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/bundle.c
bundle-uri.c
bundle.c
bundle.h
transport.c

index 127518c2a8d3c4ec0bde62f1932e964ce9bcf66f..15ac75ab5181c4ea3d4274a437182f1f460c5708 100644 (file)
@@ -218,7 +218,7 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
                strvec_pushl(&extra_index_pack_args, "-v", "--progress-title",
                             _("Unbundling objects"), NULL);
        ret = !!unbundle(the_repository, &header, bundle_fd,
-                        &extra_index_pack_args, 0) ||
+                        &extra_index_pack_args, NULL) ||
                list_bundle_refs(&header, argc, argv);
        bundle_header_release(&header);
 
index 0df66e28729e5cd8649850d641bd385500a94b45..cdf9e4f9e1dcf786ea2406d0a84a56337272842e 100644 (file)
@@ -367,6 +367,10 @@ static int unbundle_from_file(struct repository *r, const char *file)
        struct string_list_item *refname;
        struct strbuf bundle_ref = STRBUF_INIT;
        size_t bundle_prefix_len;
+       struct unbundle_opts opts = {
+               .flags = VERIFY_BUNDLE_QUIET |
+                        (fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0),
+       };
 
        bundle_fd = read_bundle_header(file, &header);
        if (bundle_fd < 0) {
@@ -379,8 +383,7 @@ static int unbundle_from_file(struct repository *r, const char *file)
         * a reachable ref pointing to the new tips, which will reach
         * the prerequisite commits.
         */
-       result = unbundle(r, &header, bundle_fd, NULL,
-                         VERIFY_BUNDLE_QUIET | (fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0));
+       result = unbundle(r, &header, bundle_fd, NULL, &opts);
        if (result) {
                result = 1;
                goto cleanup;
index 4773b51eb1df8057466c87f48445c49bc1f594ee..485033ea3f6064dae5366715215cbc49e35978f6 100644 (file)
--- a/bundle.c
+++ b/bundle.c
@@ -628,9 +628,13 @@ out:
 
 int unbundle(struct repository *r, struct bundle_header *header,
             int bundle_fd, struct strvec *extra_index_pack_args,
-            enum verify_bundle_flags flags)
+            struct unbundle_opts *opts)
 {
        struct child_process ip = CHILD_PROCESS_INIT;
+       enum verify_bundle_flags flags = 0;
+
+       if (opts)
+               flags = opts->flags;
 
        if (verify_bundle(r, header, flags))
                return -1;
index 5ccc9a061a4dd22d4a518b3d0243c61324619fa5..6a09cc7bfbd305e8388cd96d3f1717a0fcbfe5b8 100644 (file)
--- a/bundle.h
+++ b/bundle.h
@@ -39,6 +39,10 @@ enum verify_bundle_flags {
 int verify_bundle(struct repository *r, struct bundle_header *header,
                  enum verify_bundle_flags flags);
 
+struct unbundle_opts {
+       enum verify_bundle_flags flags;
+};
+
 /**
  * Unbundle after reading the header with read_bundle_header().
  *
@@ -49,12 +53,12 @@ int verify_bundle(struct repository *r, struct bundle_header *header,
  * (e.g. "-v" for verbose/progress), NULL otherwise. The provided
  * "extra_index_pack_args" (if any) will be strvec_clear()'d for you.
  *
- * Before unbundling, this method will call verify_bundle() with the
- * given 'flags'.
+ * Before unbundling, this method will call verify_bundle() with 'flags'
+ * provided in 'opts'.
  */
 int unbundle(struct repository *r, struct bundle_header *header,
             int bundle_fd, struct strvec *extra_index_pack_args,
-            enum verify_bundle_flags flags);
+            struct unbundle_opts *opts);
 int list_bundle_refs(struct bundle_header *header,
                int argc, const char **argv);
 
index 47fda6a7732f4b8cdcb6e750f36b896a988ffd0b..8536b141814262218807617f3b9de7bc5a0ed062 100644 (file)
@@ -176,6 +176,9 @@ static int fetch_refs_from_bundle(struct transport *transport,
                                  int nr_heads UNUSED,
                                  struct ref **to_fetch UNUSED)
 {
+       struct unbundle_opts opts = {
+               .flags = fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0,
+       };
        struct bundle_transport_data *data = transport->data;
        struct strvec extra_index_pack_args = STRVEC_INIT;
        int ret;
@@ -186,8 +189,7 @@ static int fetch_refs_from_bundle(struct transport *transport,
        if (!data->get_refs_from_bundle_called)
                get_refs_from_bundle_inner(transport);
        ret = unbundle(the_repository, &data->header, data->fd,
-                      &extra_index_pack_args,
-                      fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0);
+                      &extra_index_pack_args, &opts);
        transport->hash_algo = data->header.hash_algo;
 
        strvec_clear(&extra_index_pack_args);