Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- Notes: This patch has been split up into 2 parts. This first part only introduces the infrastructure without exposing it to the user at all (no command line option nor a repository configuration option). The exposure to the user will be added in a later second patch. This allows us some time in between to build all the features we want without the requirement to be functional. remote.h | 2 ++ transport-helper.c | 1 + transport.c | 15 +++++++++++++++ transport.h | 5 +++++ 4 files changed, 23 insertions(+) diff --git a/remote.h b/remote.h index 16cacfe..3767bed 100644 --- a/remote.h +++ b/remote.h @@ -50,6 +50,8 @@ struct remote { const char *receivepack; const char *uploadpack; + int transport_version; + /* * for curl remotes only */ diff --git a/transport-helper.c b/transport-helper.c index 5d99a6b..ab3cd5b 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -247,6 +247,7 @@ static int disconnect_helper(struct transport *transport) } static const char *unsupported_options[] = { + TRANS_OPT_TRANSPORTVERSION, TRANS_OPT_UPLOADPACK, TRANS_OPT_RECEIVEPACK, TRANS_OPT_THIN, diff --git a/transport.c b/transport.c index f080e93..651f0ac 100644 --- a/transport.c +++ b/transport.c @@ -479,6 +479,16 @@ static int set_git_option(struct git_transport_options *opts, } else if (!strcmp(name, TRANS_OPT_PUSH_CERT)) { opts->push_cert = !!value; return 0; + } else if (!strcmp(name, TRANS_OPT_TRANSPORTVERSION)) { + if (!value) + opts->transport_version = DEFAULT_TRANSPORT_VERSION; + else { + char *end; + opts->transport_version = strtol(value, &end, 0); + if (*end) + die("transport: invalid transport version option '%s'", value); + } + return 0; } return 1; } @@ -970,6 +980,8 @@ struct transport *transport_get(struct remote *remote, const char *url) ret->connect = connect_git; ret->disconnect = disconnect_git; ret->smart_options = &(data->options); + ret->smart_options->transport_version = + DEFAULT_TRANSPORT_VERSION; data->conn = NULL; data->got_remote_heads = 0; @@ -988,6 +1000,9 @@ struct transport *transport_get(struct remote *remote, const char *url) ret->smart_options->receivepack = "git-receive-pack"; if (remote->receivepack) ret->smart_options->receivepack = remote->receivepack; + if (remote->transport_version) + ret->smart_options->transport_version = + remote->transport_version; } return ret; diff --git a/transport.h b/transport.h index 18d2cf8..6095d7a 100644 --- a/transport.h +++ b/transport.h @@ -14,6 +14,7 @@ struct git_transport_options { unsigned update_shallow : 1; unsigned push_cert : 1; int depth; + int transport_version; const char *uploadpack; const char *receivepack; struct push_cas_option *cas; @@ -162,6 +163,10 @@ struct transport *transport_get(struct remote *, const char *); /* Send push certificates */ #define TRANS_OPT_PUSH_CERT "pushcert" +/* Use a new version of the git protocol */ +#define TRANS_OPT_TRANSPORTVERSION "transportversion" +#define DEFAULT_TRANSPORT_VERSION 1 + /** * Returns 0 if the option was used, non-zero otherwise. Prints a * message to stderr if the option is not used. -- 2.4.1.345.gab207b6.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html