diff options
author | Vicent Marti <vicent@github.com> | 2014-09-03 12:50:44 +0200 |
---|---|---|
committer | Vicent Marti <vicent@github.com> | 2014-09-03 12:50:44 +0200 |
commit | 89e05e2ab19ac452e84e0eaa2dfb8e07ac6839bf (patch) | |
tree | acfd165ed28637b5518249f8092ffadfb92837d3 | |
parent | 4c958046d3ed7f67c6dee495b8d874df9048dc55 (diff) | |
parent | 05ac70514fed0ae75ba2844f22b233da1c25b8cc (diff) | |
download | libgit2-89e05e2ab19ac452e84e0eaa2dfb8e07ac6839bf.tar.gz |
Merge pull request #2543 from libgit2/cmn/known-transports
Clean up transport lookup
-rw-r--r-- | include/git2/remote.h | 13 | ||||
-rw-r--r-- | src/transport.c | 36 | ||||
-rw-r--r-- | tests/network/remote/remotes.c | 30 |
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, ¶m); -} - int git_remote_supported_url(const char* url) { git_transport_cb fn; void *param; - if (transport_find_fn(&fn, url, ¶m) < 0) - return 0; - - return fn != &git_transport_dummy; + /* The only error we expect is ENOTFOUND */ + return !transport_find_fn(&fn, url, ¶m); } 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) |