On Jul 3, 2008, at 1:10 PM, Johannes Schindelin wrote:

On Wed, 2 Jul 2008, Johannes Sixt wrote:

On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:
From: Edward Z. Yang <[EMAIL PROTECTED]>

PuTTY requires -P while OpenSSH requires -p; if plink is detected
as GIT_SSH, use the alternate flag.

Signed-off-by: Edward Z. Yang <[EMAIL PROTECTED]>
Signed-off-by: Steffen Prohaska <[EMAIL PROTECTED]>
---
connect.c |    4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/connect.c b/connect.c
index 574f42f..0d007f3 100644
--- a/connect.c
+++ b/connect.c
@@ -599,11 +599,13 @@ struct child_process *git_connect(int fd[2], const
char *url_orig, conn->argv = arg = xcalloc(6, sizeof(*arg));
        if (protocol == PROTO_SSH) {
                const char *ssh = getenv("GIT_SSH");
+               int putty = ssh && strstr(ssh, "plink");
                if (!ssh) ssh = "ssh";

                *arg++ = ssh;
                if (port) {
-                       *arg++ = "-p";
+                       /* P is for PuTTY, p is for OpenSSH */
+                       *arg++ = putty ? "-P" : "-p";
                        *arg++ = port;
                }
                *arg++ = host;

What about installing a wrapper script, plinkssh, that does this:

#!/bin/bash

if test "$1" = -p; then
        port="-P $2"
        shift; shift
fi

exec plink $port "$@"

and require plink users to set GIT_SSH=plinkssh?

I like that better than this special-casing of plink.


I'd prefer to change connect.c.  plinkssh would introduce another
dependency on the shell, while our overall goal is to avoid shell as
much as possible on Windows, no?  Edward's solution also looks more
obvious to me than the plinkssh wrapper script.

        Steffen

Reply via email to