transport: add capabilities query function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
diff --git a/include/git2/sys/transport.h b/include/git2/sys/transport.h
index 89e6876..f0c2a3e 100644
--- a/include/git2/sys/transport.h
+++ b/include/git2/sys/transport.h
@@ -47,6 +47,16 @@ struct git_transport {
const git_remote_connect_options *connect_opts);
/**
+ * Gets the capabilities for this remote repository.
+ *
+ * This function may be called after a successful call to
+ * `connect()`.
+ */
+ int GIT_CALLBACK(capabilities)(
+ unsigned int *capabilities,
+ git_transport *transport);
+
+ /**
* Get the list of available references in the remote repository.
*
* This function may be called after a successful call to
diff --git a/src/transports/local.c b/src/transports/local.c
index 86524ed..0c768fa 100644
--- a/src/transports/local.c
+++ b/src/transports/local.c
@@ -256,6 +256,14 @@ static int local_set_connect_opts(
return git_remote_connect_options_normalize(&t->connect_opts, t->owner->repo, connect_opts);
}
+static int local_capabilities(unsigned int *capabilities, git_transport *transport)
+{
+ GIT_UNUSED(transport);
+
+ *capabilities = 0;
+ return 0;
+}
+
static int local_ls(const git_remote_head ***out, size_t *size, git_transport *transport)
{
transport_local *t = (transport_local *)transport;
@@ -721,6 +729,7 @@ int git_transport_local(git_transport **out, git_remote *owner, void *param)
t->parent.version = GIT_TRANSPORT_VERSION;
t->parent.connect = local_connect;
t->parent.set_connect_opts = local_set_connect_opts;
+ t->parent.capabilities = local_capabilities;
t->parent.negotiate_fetch = local_negotiate_fetch;
t->parent.download_pack = local_download_pack;
t->parent.push = local_push;
diff --git a/src/transports/smart.c b/src/transports/smart.c
index e76c18f..3b58b84 100644
--- a/src/transports/smart.c
+++ b/src/transports/smart.c
@@ -226,6 +226,14 @@ static int git_smart__set_connect_opts(
return git_remote_connect_options_normalize(&t->connect_opts, t->owner->repo, opts);
}
+static int git_smart__capabilities(unsigned int *capabilities, git_transport *transport)
+{
+ GIT_UNUSED(transport);
+
+ *capabilities = 0;
+ return 0;
+}
+
static int git_smart__ls(const git_remote_head ***out, size_t *size, git_transport *transport)
{
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
@@ -423,6 +431,7 @@ int git_transport_smart(git_transport **out, git_remote *owner, void *param)
t->parent.version = GIT_TRANSPORT_VERSION;
t->parent.connect = git_smart__connect;
t->parent.set_connect_opts = git_smart__set_connect_opts;
+ t->parent.capabilities = git_smart__capabilities;
t->parent.close = git_smart__close;
t->parent.free = git_smart__free;
t->parent.negotiate_fetch = git_smart__negotiate_fetch;