The git_connect function has code to handle plink and tortoiseplink specially, as they require different command line arguments from OpenSSH. However, the match was done by checking for "plink" case-insensitively in the string, which led to false positives when GIT_SSH contained "uplink". Improve the check by looking for "plink" or "tortoiseplink" only at the beginning of the string or immediately after a directory separator. Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> --- This is essentially just a deindentation. connect.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/connect.c b/connect.c index 749a07b..bae76a2 100644 --- a/connect.c +++ b/connect.c @@ -724,7 +724,7 @@ struct child_process *git_connect(int fd[2], const char *url, conn->in = conn->out = -1; if (protocol == PROTO_SSH) { const char *ssh; - int putty; + int putty, tortoiseplink = 0; char *ssh_host = hostandport; const char *port = NULL; get_host_and_port(&ssh_host, &port); @@ -750,14 +750,23 @@ struct child_process *git_connect(int fd[2], const char *url, conn->use_shell = 1; putty = 0; } else { + char *plink, *tplink; + ssh = getenv("GIT_SSH"); if (!ssh) ssh = "ssh"; - putty = !!strcasestr(ssh, "plink"); + + plink = strcasestr(ssh, "plink"); + tplink = strcasestr(ssh, "tortoiseplink"); + + tortoiseplink = tplink == ssh || + (tplink && is_dir_sep(tplink[-1])); + putty = tortoiseplink || plink == ssh || + (plink && is_dir_sep(plink[-1])); } argv_array_push(&conn->args, ssh); - if (putty && !strcasestr(ssh, "tortoiseplink")) + if (tortoiseplink) argv_array_push(&conn->args, "-batch"); if (port) { /* P is for PuTTY, p is for OpenSSH */ -- 2.3.5 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html