@@ -78,6 +78,12 @@ transfer.advertiseSID::
Boolean. When true, client and server processes will advertise their
unique session IDs to their remote counterpart. Defaults to false.
+transfer.bundleURI::
+ When set to `false` ignores any server advertisement of
+ `bundle-uri` and proceed with a "normal" clone/fetch even if
+ using bundles to bootstap is possible. Defaults to `true`,
+ i.e. bundle-uri is tried whenever a server offers it.
+
transfer.injectBundleURI::
Allows for the injection of `bundle-uri` lines into the
protocol v2 transport dialog (see `protocol.version` in
@@ -1521,19 +1521,28 @@ int transport_fetch_refs(struct transport *transport, struct ref *refs)
return rc;
}
-struct config_cb {
+struct bundle_config_cb {
struct transport *transport;
int configured;
int ret;
+ int disabled;
};
static int bundle_uri_config(const char *var, const char *value, void *data)
{
- struct config_cb *cb = data;
+ struct bundle_config_cb *cb = data;
struct transport *transport = cb->transport;
struct string_list *uri = &transport->bundle_uri;
- if (!strcmp(var, "transfer.injectbundleuri")) {
+ if (!strcmp(var, "transfer.bundleuri")) {
+ cb->disabled = !git_config_bool(var, value);
+ if (cb->disabled)
+ bundle_uri_string_list_clear(uri);
+ return 0;
+ }
+
+ if (!cb->disabled &&
+ !strcmp(var, "transfer.injectbundleuri")) {
cb->configured = 1;
if (!value)
cb->ret = error(_("bad (empty) transfer.injectBundleURI"));
@@ -1548,7 +1557,7 @@ static int bundle_uri_config(const char *var, const char *value, void *data)
int transport_get_remote_bundle_uri(struct transport *transport, int quiet)
{
const struct transport_vtable *vtable = transport->vtable;
- struct config_cb cb = {
+ struct bundle_config_cb cb = {
.transport = transport,
};
@@ -1558,6 +1567,10 @@ int transport_get_remote_bundle_uri(struct transport *transport, int quiet)
git_config(bundle_uri_config, &cb);
+ /* Don't use bundle-uri at all */
+ if (cb.disabled)
+ return 0;
+
/* Our own config can fake it up with transport.injectBundleURI */
if (cb.configured)
return cb.ret;
The yet-to-be introduced client support for bundle-uri will always fall back on a full clone, but we'd still like to be able to ignore a server's bundle-uri advertisement entirely. This is useful for testing, and if a server is pointing to bad bundles, they take a while to time out etc. Since we might see the config in any order we need to clear out any accumulated bundle_uri list when we see transfer.bundleURI=false setting, and not add any more things to the list. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- Documentation/config/transfer.txt | 6 ++++++ transport.c | 21 +++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-)