Thread (4 messages) 4 messages, 3 authors, 2016-06-15

Re: [PATCH] clone: allow cloning local paths with colons in them

flat view

From: Duy Nguyen <hidden>
Date: 2016-06-15 22:57:03

On Sun, Apr 28, 2013 at 4:16 AM, Junio C Hamano [off-list ref] wrote:
Nguyễn Thái Ngọc Duy [off-list ref] writes:
quoted
diff --git a/connect.c b/connect.c
index f57efd0..b568f10 100644
--- a/connect.c
+++ b/connect.c
@@ -551,8 +551,11 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
      path = strchr(end, c);
      if (path && !has_dos_drive_prefix(end)) {
              if (c == ':') {
-                     protocol = PROTO_SSH;
-                     *path++ = '\0';
+                     if (!strchr(url, '/') || strchr(url, '/') >= path) {
+                             protocol = PROTO_SSH;
+                             *path++ = '\0';
+                     } else
+                             path = end
              }
That was fairly hard to grok. Is that equivalent to this?

                if (c == ':' && path < strchrnul(host, '/')) {
                        /* is the first slash past the colon? */
                        protocol = PROTO_SSH;
                        *path++ = '\0';
                } else {
                        path = end;
                }
The original code is already hard to grok so I may be mistaken here.
But I think it's not the same. For the case when c == '/', it will do
"path = end;", which is unintended. It should keep the current "path"
value (i.e. == strchr(end, '/')). The use of "strchrnul(host, '/')" is
good though.
--
Duy
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help