diff options
| author | Jameson Miller <jamill@microsoft.com> | 2012-12-13 12:51:23 -0500 |
|---|---|---|
| committer | Jameson Miller <jamill@microsoft.com> | 2012-12-13 14:42:40 -0500 |
| commit | cb2ace69f453c598e97697fda449e8ce75fd5c0a (patch) | |
| tree | ec75e7fe5a01e1a5a88e4a2784a7b4aaab3a5af7 /src/transport.c | |
| parent | ae0ddc6f024c52d8a4144b31ff122b922d72aeb4 (diff) | |
| download | libgit2-cb2ace69f453c598e97697fda449e8ce75fd5c0a.tar.gz | |
Transport resolution on Win32 should handle absolute local paths
Diffstat (limited to 'src/transport.c')
| -rw-r--r-- | src/transport.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/transport.c b/src/transport.c index 9c88d983e..1c4f3301b 100644 --- a/src/transport.c +++ b/src/transport.c @@ -53,15 +53,30 @@ static int transport_find_fn(const char *url, git_transport_cb *callback, void * definition = definition_iter; } - if (!definition) { - /* still here? Check to see if the path points to a file on the local file system */ - if ((git_path_exists(url) == 0) && git_path_isdir(url)) - definition = &local_transport_definition; - - /* It could be a SSH remote path. Check to see if there's a : */ - if (strrchr(url, ':')) - definition = &dummy_transport_definition; /* SSH is an unsupported transport mechanism in this version of libgit2 */ - } +#ifdef GIT_WIN32 + /* On Windows, it might not be possible to discern between absolute local + * and ssh paths - first check if this is a valid local path that points + * to a directory and if so assume local path, else assume SSH */ + + /* 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; + + /* It could be a SSH remote path. Check to see if there's a : */ + if (!definition && strrchr(url, ':')) + definition = &dummy_transport_definition; /* SSH is an unsupported transport mechanism in this version of libgit2 */ +#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 : */ + if (!definition && strrchr(url, ':')) + definition = &dummy_transport_definition; /* SSH is an unsupported transport mechanism in this version of libgit2 */ + + /* 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) return -1; |
