From 7a5449662972769b6b09540463d8b6378664393a Mon Sep 17 00:00:00 2001 From: Ryan Wilcox Date: Thu, 1 Mar 2012 08:31:50 -0500 Subject: [PATCH] introduced new function: git_remote_supported_url() <-- returns true if this version of libgit2 supports the correct transport mechanism for a URL or path --- src/transport.c | 6 ++++++ src/transport.h | 12 ++++++++++++ tests-clar/network/remotes.c | 13 ++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/transport.c b/src/transport.c index e6ba0758b..cd1fd88b5 100644 --- a/src/transport.c +++ b/src/transport.c @@ -88,3 +88,9 @@ int git_remote_valid_url(const char *url) return transport_find_fn(url) != NULL; } +int git_remote_supported_url(const char* url) +{ + git_transport_cb transport_fn = transport_find_fn(url); + + return ((transport_fn != NULL) && (transport_fn != &git_transport_dummy)); +} diff --git a/src/transport.h b/src/transport.h index 4c123571d..812099e7f 100644 --- a/src/transport.h +++ b/src/transport.h @@ -102,8 +102,20 @@ int git_transport_local(struct git_transport **transport); int git_transport_git(struct git_transport **transport); int git_transport_http(struct git_transport **transport); int git_transport_dummy(struct git_transport **transport); + +/** + Returns true if the passed URL is valid (a URL with a Git supported scheme, + or pointing to an existing path) +*/ int git_transport_valid_url(const char *url); +/** + Returns true if the passed URL is supported by this version of libgit2. + (or, more technically, the transport method inferred by libgit is supported + by this version of libgit2). +*/ +int git_remote_supported_url(const char* url); + typedef struct git_transport git_transport; typedef int (*git_transport_cb)(git_transport **transport); diff --git a/tests-clar/network/remotes.c b/tests-clar/network/remotes.c index 4cf473d70..add99c18b 100644 --- a/tests-clar/network/remotes.c +++ b/tests-clar/network/remotes.c @@ -1,6 +1,7 @@ #include "clar_libgit2.h" #include "buffer.h" #include "refspec.h" +#include "transport.h" static git_remote *_remote; static git_repository *_repo; @@ -35,11 +36,21 @@ void test_network_remotes__parsing_ssh_remote(void) cl_assert( git_remote_valid_url("git@github.com:libgit2/libgit2.git") ); } -void test_network_remotes__parsing_local_path(void) +void test_network_remotes__parsing_local_path_fails_if_path_not_found(void) { cl_assert( !git_remote_valid_url("/home/git/repos/libgit2.git") ); } +void test_network_remotes__supported_transport_methods_are_supported(void) +{ + cl_assert( git_remote_supported_url("git://github.com/libgit2/libgit2") ); +} + +void test_network_remotes__unsupported_transport_methods_are_unsupported(void) +{ + cl_assert( !git_remote_supported_url("git@github.com:libgit2/libgit2.git") ); +} + void test_network_remotes__refspec_parsing(void) { cl_assert(!strcmp(git_refspec_src(_refspec), "refs/heads/*"));