summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Marti <vicent@github.com>2014-09-03 12:50:44 +0200
committerVicent Marti <vicent@github.com>2014-09-03 12:50:44 +0200
commit89e05e2ab19ac452e84e0eaa2dfb8e07ac6839bf (patch)
treeacfd165ed28637b5518249f8092ffadfb92837d3
parent4c958046d3ed7f67c6dee495b8d874df9048dc55 (diff)
parent05ac70514fed0ae75ba2844f22b233da1c25b8cc (diff)
downloadlibgit2-89e05e2ab19ac452e84e0eaa2dfb8e07ac6839bf.tar.gz
Merge pull request #2543 from libgit2/cmn/known-transports
Clean up transport lookup
-rw-r--r--include/git2/remote.h13
-rw-r--r--src/transport.c36
-rw-r--r--tests/network/remote/remotes.c30
3 files changed, 23 insertions, 56 deletions
diff --git a/include/git2/remote.h b/include/git2/remote.h
index c0717fa31..de5823e6d 100644
--- a/include/git2/remote.h
+++ b/include/git2/remote.h
@@ -384,15 +384,12 @@ GIT_EXTERN(int) git_remote_fetch(
const char *reflog_message);
/**
- * Return whether a string is a valid remote URL
*
- * @param url the url to check
- * @return 1 if the url is valid, 0 otherwise
- */
-GIT_EXTERN(int) git_remote_valid_url(const char *url);
-
-/**
- * Return whether the passed URL is supported by this version of the library.
+ * Return whether the library supports a particular URL scheme
+ *
+ * Both the built-in and externally-registered transport lists are
+ * searched for a transport which supports the scheme of the given
+ * URL.
*
* @param url the url to check
* @return 1 if the url is supported, 0 otherwise
diff --git a/src/transport.c b/src/transport.c
index d390e1422..d42c92684 100644
--- a/src/transport.c
+++ b/src/transport.c
@@ -25,16 +25,13 @@ static git_smart_subtransport_definition ssh_subtransport_definition = { git_sma
#endif
static transport_definition local_transport_definition = { "file://", git_transport_local, NULL };
-#ifdef GIT_SSH
-static transport_definition ssh_transport_definition = { "ssh://", git_transport_smart, &ssh_subtransport_definition };
-#else
-static transport_definition dummy_transport_definition = { NULL, git_transport_dummy, NULL };
-#endif
static transport_definition transports[] = {
{ "git://", git_transport_smart, &git_subtransport_definition },
{ "http://", git_transport_smart, &http_subtransport_definition },
+#if defined(GIT_SSL) || defined(GIT_WINHTTP)
{ "https://", git_transport_smart, &http_subtransport_definition },
+#endif
{ "file://", git_transport_local, NULL },
#ifdef GIT_SSH
{ "ssh://", git_transport_smart, &ssh_subtransport_definition },
@@ -95,11 +92,6 @@ static int transport_find_fn(
if (!definition && strrchr(url, ':')) {
// re-search transports again with ssh:// as url so that we can find a third party ssh transport
definition = transport_find_by_url("ssh://");
-#ifndef GIT_SSH
- if (!definition) {
- definition = &dummy_transport_definition;
- }
-#endif
}
#ifndef GIT_WIN32
@@ -121,15 +113,6 @@ static int transport_find_fn(
* Public API *
**************/
-int git_transport_dummy(git_transport **transport, git_remote *owner, void *param)
-{
- GIT_UNUSED(transport);
- GIT_UNUSED(owner);
- GIT_UNUSED(param);
- giterr_set(GITERR_NET, "This transport isn't implemented. Sorry");
- return -1;
-}
-
int git_transport_new(git_transport **out, git_remote *owner, const char *url)
{
git_transport_cb fn;
@@ -229,24 +212,13 @@ done:
return error;
}
-/* from remote.h */
-int git_remote_valid_url(const char *url)
-{
- git_transport_cb fn;
- void *param;
-
- return !transport_find_fn(&fn, url, &param);
-}
-
int git_remote_supported_url(const char* url)
{
git_transport_cb fn;
void *param;
- if (transport_find_fn(&fn, url, &param) < 0)
- return 0;
-
- return fn != &git_transport_dummy;
+ /* The only error we expect is ENOTFOUND */
+ return !transport_find_fn(&fn, url, &param);
}
int git_transport_init(git_transport *opts, unsigned int version)
diff --git a/tests/network/remote/remotes.c b/tests/network/remote/remotes.c
index 21c57119a..45f2a795f 100644
--- a/tests/network/remote/remotes.c
+++ b/tests/network/remote/remotes.c
@@ -91,26 +91,24 @@ void test_network_remote_remotes__error_when_no_push_available(void)
git_remote_free(r);
}
-void test_network_remote_remotes__parsing_ssh_remote(void)
+void test_network_remote_remotes__supported_urls(void)
{
- cl_assert( git_remote_valid_url("git@github.com:libgit2/libgit2.git") );
-}
+ int ssh_supported = 0, https_supported = 0;
-void test_network_remote_remotes__parsing_local_path_fails_if_path_not_found(void)
-{
- cl_assert( !git_remote_valid_url("/home/git/repos/libgit2.git") );
-}
-
-void test_network_remote_remotes__supported_transport_methods_are_supported(void)
-{
- cl_assert( git_remote_supported_url("git://github.com/libgit2/libgit2") );
-}
+#ifdef GIT_SSH
+ ssh_supported = 1;
+#endif
-void test_network_remote_remotes__unsupported_transport_methods_are_unsupported(void)
-{
-#ifndef GIT_SSH
- cl_assert( !git_remote_supported_url("git@github.com:libgit2/libgit2.git") );
+#if defined(GIT_SSL) || defined(GIT_WINHTTP)
+ https_supported = 1;
#endif
+
+ cl_assert(git_remote_supported_url("git://github.com/libgit2/libgit2"));
+ cl_assert(git_remote_supported_url("http://github.com/libgit2/libgit2"));
+
+ cl_assert_equal_i(ssh_supported, git_remote_supported_url("git@github.com:libgit2/libgit2.git"));
+ cl_assert_equal_i(ssh_supported, git_remote_supported_url("ssh://git@github.com/libgit2/libgit2.git"));
+ cl_assert_equal_i(https_supported, git_remote_supported_url("https://github.com/libgit2/libgit2.git"));
}
void test_network_remote_remotes__refspec_parsing(void)