Commit 89e05e2a by Vicent Marti

Merge pull request #2543 from libgit2/cmn/known-transports

Clean up transport lookup
parents 4c958046 05ac7051
......@@ -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
......
......@@ -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)
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment