Signed-off-by: Mike Hommey <m...@glandium.org>
---
 connect.c | 109 ++++++++++++++++++++++++++++++++++----------------------------
 1 file changed, 59 insertions(+), 50 deletions(-)

diff --git a/connect.c b/connect.c
index 215d6d9..37b3140 100644
--- a/connect.c
+++ b/connect.c
@@ -673,6 +673,62 @@ static enum protocol parse_connect_url(const char 
*url_orig, char **ret_user,
        return protocol;
 }
 
+static int prepare_ssh_command(struct argv_array *cmd, const char *user,
+                              const char *host, const char *port, int flags)
+{
+       const char *ssh;
+       int putty = 0, tortoiseplink = 0, use_shell = 1;
+       transport_check_allowed("ssh");
+
+       ssh = getenv("GIT_SSH_COMMAND");
+       if (!ssh) {
+               const char *base;
+               char *ssh_dup;
+
+               /*
+                * GIT_SSH is the no-shell version of
+                * GIT_SSH_COMMAND (and must remain so for
+                * historical compatibility).
+                */
+               use_shell = 0;
+
+               ssh = getenv("GIT_SSH");
+               if (!ssh)
+                       ssh = "ssh";
+
+               ssh_dup = xstrdup(ssh);
+               base = basename(ssh_dup);
+
+               tortoiseplink = !strcasecmp(base, "tortoiseplink") ||
+                       !strcasecmp(base, "tortoiseplink.exe");
+               putty = tortoiseplink ||
+                       !strcasecmp(base, "plink") ||
+                       !strcasecmp(base, "plink.exe");
+
+               free(ssh_dup);
+       }
+
+       argv_array_push(cmd, ssh);
+       if (flags & CONNECT_IPV4)
+               argv_array_push(cmd, "-4");
+       else if (flags & CONNECT_IPV6)
+               argv_array_push(cmd, "-6");
+       if (tortoiseplink)
+               argv_array_push(cmd, "-batch");
+       if (port) {
+               /* P is for PuTTY, p is for OpenSSH */
+               argv_array_push(cmd, putty ? "-P" : "-p");
+               argv_array_push(cmd, port);
+       }
+       if (user) {
+               argv_array_push(cmd, "-l");
+               argv_array_push(cmd, user);
+       }
+       argv_array_push(cmd, host);
+
+       return use_shell;
+}
+
 static struct child_process no_fork = CHILD_PROCESS_INIT;
 
 /*
@@ -767,59 +823,12 @@ struct child_process *git_connect(int fd[2], const char 
*url,
 
                /* remove repo-local variables from the environment */
                conn->env = local_repo_env;
-               conn->use_shell = 1;
                conn->in = conn->out = -1;
                if (protocol == PROTO_SSH) {
-                       const char *ssh;
-                       int putty = 0, tortoiseplink = 0;
-                       transport_check_allowed("ssh");
-
-                       ssh = getenv("GIT_SSH_COMMAND");
-                       if (!ssh) {
-                               const char *base;
-                               char *ssh_dup;
-
-                               /*
-                                * GIT_SSH is the no-shell version of
-                                * GIT_SSH_COMMAND (and must remain so for
-                                * historical compatibility).
-                                */
-                               conn->use_shell = 0;
-
-                               ssh = getenv("GIT_SSH");
-                               if (!ssh)
-                                       ssh = "ssh";
-
-                               ssh_dup = xstrdup(ssh);
-                               base = basename(ssh_dup);
-
-                               tortoiseplink = !strcasecmp(base, 
"tortoiseplink") ||
-                                       !strcasecmp(base, "tortoiseplink.exe");
-                               putty = tortoiseplink ||
-                                       !strcasecmp(base, "plink") ||
-                                       !strcasecmp(base, "plink.exe");
-
-                               free(ssh_dup);
-                       }
-
-                       argv_array_push(&conn->args, ssh);
-                       if (flags & CONNECT_IPV4)
-                               argv_array_push(&conn->args, "-4");
-                       else if (flags & CONNECT_IPV6)
-                               argv_array_push(&conn->args, "-6");
-                       if (tortoiseplink)
-                               argv_array_push(&conn->args, "-batch");
-                       if (port) {
-                               /* P is for PuTTY, p is for OpenSSH */
-                               argv_array_push(&conn->args, putty ? "-P" : 
"-p");
-                               argv_array_push(&conn->args, port);
-                       }
-                       if (user) {
-                               argv_array_push(&conn->args, "-l");
-                               argv_array_push(&conn->args, user);
-                       }
-                       argv_array_push(&conn->args, host);
+                       conn->use_shell = prepare_ssh_command(
+                               &conn->args, host, port, flags);
                } else {
+                       conn->use_shell = 1;
                        transport_check_allowed("file");
                }
                argv_array_push(&conn->args, cmd.buf);
-- 
2.8.1.16.gaa70619.dirty

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to