]> git.proxmox.com Git - libgit2.git/commitdiff
Transport resolution on Win32 should handle absolute local paths
authorJameson Miller <jamill@microsoft.com>
Thu, 13 Dec 2012 17:51:23 +0000 (12:51 -0500)
committerJameson Miller <jamill@microsoft.com>
Thu, 13 Dec 2012 19:42:40 +0000 (14:42 -0500)
src/transport.c

index 9c88d983eb2e600b7c288e17b3efe5a6453ef882..1c4f3301bc2c211c438c575f248bb67b2ae532d1 100644 (file)
@@ -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;