Signed-off-by: Stefan Beller <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html