aboutsummaryrefslogtreecommitdiffstats
path: root/transport.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2024-12-13 07:33:36 -0800
committerJunio C Hamano <gitster@pobox.com>2024-12-13 07:33:36 -0800
commita32668829d0b23a11f47596812e74725791142a1 (patch)
tree74ca317f4234e0b8b0fa3029291eb3dba15d6140 /transport.c
parentcaacdb5dfd60540ecec30ec479f147f3c8167e11 (diff)
parentbaa159137be36965e03192528b001ffc39b8352f (diff)
downloadgit-a32668829d0b23a11f47596812e74725791142a1.tar.gz
Merge branch 'jt/bundle-fsck'
"git bundle --unbundle" and "git clone" running on a bundle file both learned to trigger fsck over the new objects with configurable fck check levels. * jt/bundle-fsck: transport: propagate fsck configuration during bundle fetch fetch-pack: split out fsck config parsing bundle: support fsck message configuration bundle: add bundle verification options type
Diffstat (limited to 'transport.c')
-rw-r--r--transport.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/transport.c b/transport.c
index 47fda6a773..6966df51a8 100644
--- a/transport.c
+++ b/transport.c
@@ -19,6 +19,7 @@
#include "branch.h"
#include "url.h"
#include "submodule.h"
+#include "strbuf.h"
#include "string-list.h"
#include "oid-array.h"
#include "sigchain.h"
@@ -172,12 +173,29 @@ static struct ref *get_refs_from_bundle(struct transport *transport,
return result;
}
+static int fetch_fsck_config_cb(const char *var, const char *value,
+ const struct config_context *ctx UNUSED, void *cb)
+{
+ struct strbuf *msg_types = cb;
+ int ret;
+
+ ret = fetch_pack_fsck_config(var, value, msg_types);
+ if (ret > 0)
+ return 0;
+
+ return ret;
+}
+
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;
+ struct strbuf msg_types = STRBUF_INIT;
int ret;
if (transport->progress)
@@ -185,12 +203,16 @@ static int fetch_refs_from_bundle(struct transport *transport,
if (!data->get_refs_from_bundle_called)
get_refs_from_bundle_inner(transport);
+
+ git_config(fetch_fsck_config_cb, &msg_types);
+ opts.fsck_msg_types = msg_types.buf;
+
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);
+ strbuf_release(&msg_types);
return ret;
}