Commit 44f5f777 by Vicent Marti

Merge remote-tracking branch 'jamill/transport_localpaths' into development

parents ae0ddc6f f0a2def5
...@@ -53,15 +53,32 @@ static int transport_find_fn(const char *url, git_transport_cb *callback, void * ...@@ -53,15 +53,32 @@ static int transport_find_fn(const char *url, git_transport_cb *callback, void *
definition = definition_iter; definition = definition_iter;
} }
if (!definition) { #ifdef GIT_WIN32
/* still here? Check to see if the path points to a file on the local file system */ /* On Windows, it might not be possible to discern between absolute local
if ((git_path_exists(url) == 0) && git_path_isdir(url)) * and ssh paths - first check if this is a valid local path that points
definition = &local_transport_definition; * to a directory and if so assume local path, else assume SSH */
/* It could be a SSH remote path. Check to see if there's a : */ /* Check to see if the path points to a file on the local file system */
if (strrchr(url, ':')) if (!definition && git_path_exists(url) && git_path_isdir(url))
definition = &dummy_transport_definition; /* SSH is an unsupported transport mechanism in this version of libgit2 */ definition = &local_transport_definition;
}
/* It could be a SSH remote path. Check to see if there's a :
* SSH is an unsupported transport mechanism in this version of libgit2 */
if (!definition && strrchr(url, ':'))
definition = &dummy_transport_definition;
#else
/* For other systems, perform the SSH check first, to avoid going to the
* filesystem if it is not necessary */
/* It could be a SSH remote path. Check to see if there's a :
* SSH is an unsupported transport mechanism in this version of libgit2 */
if (!definition && strrchr(url, ':'))
definition = &dummy_transport_definition;
/* Check to see if the path points to a file on the local file system */
if (!definition && git_path_exists(url) && git_path_isdir(url))
definition = &local_transport_definition;
#endif
if (!definition) if (!definition)
return -1; return -1;
......
...@@ -39,6 +39,14 @@ void test_clone_nonetwork__local(void) ...@@ -39,6 +39,14 @@ void test_clone_nonetwork__local(void)
cl_git_pass(git_clone(&g_repo, src, "./local", NULL, NULL, NULL)); cl_git_pass(git_clone(&g_repo, src, "./local", NULL, NULL, NULL));
} }
void test_clone_nonetwork__local_absolute_path(void)
{
const char *src = cl_fixture("testrepo.git");
cl_set_cleanup(&cleanup_repository, "./local");
cl_git_pass(git_clone(&g_repo, src, "./local", NULL, NULL, NULL));
}
void test_clone_nonetwork__local_bare(void) void test_clone_nonetwork__local_bare(void)
{ {
const char *src = cl_git_fixture_url("testrepo.git"); const char *src = cl_git_fixture_url("testrepo.git");
......
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