mirror of
https://git.proxmox.com/git/libgit2
synced 2025-11-02 19:15:06 +00:00
Merge pull request #2543 from libgit2/cmn/known-transports
Clean up transport lookup
This commit is contained in:
commit
89e05e2ab1
@ -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, ¶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)
|
||||
|
||||
@ -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") );
|
||||
}
|
||||
|
||||
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") );
|
||||
#ifdef GIT_SSH
|
||||
ssh_supported = 1;
|
||||
#endif
|
||||
|
||||
#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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user