Code

grep: simplify assignment of ->fixed
[git.git] / connect.c
index 839a1037057d5224b4d35e0065168283d29f4cb2..20054e4d0fd4cf94288593726be179d07d19271c 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -502,12 +502,18 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
                c = ':';
        }
 
+       /*
+        * Don't do destructive transforms with git:// as that
+        * protocol code does '[]' dewrapping of its own.
+        */
        if (host[0] == '[') {
                end = strchr(host + 1, ']');
                if (end) {
-                       *end = 0;
+                       if (protocol != PROTO_GIT) {
+                               *end = 0;
+                               host++;
+                       }
                        end++;
-                       host++;
                } else
                        end = host;
        } else
@@ -609,11 +615,11 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
                        GIT_WORK_TREE_ENVIRONMENT,
                        GRAFT_ENVIRONMENT,
                        INDEX_ENVIRONMENT,
+                       NO_REPLACE_OBJECTS_ENVIRONMENT,
                        NULL
                };
                conn->env = env;
-               *arg++ = "sh";
-               *arg++ = "-c";
+               conn->use_shell = 1;
        }
        *arg++ = cmd.buf;
        *arg = NULL;