ref-filter: move ref_cbdata definition into ref-filter.c
[gitweb.git] / connect.c
index 7f1f80239646cbf6fe2c971a63a21143dbf041e8..7d65c1c73634363e85a652619cc8705223bc70cb 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -691,17 +691,39 @@ static const char *get_ssh_command(void)
        return NULL;
 }
 
-static int handle_ssh_variant(const char *ssh_command, int is_cmdline,
-                             int *port_option, int *needs_batch)
+static int override_ssh_variant(int *port_option, int *needs_batch)
 {
-       const char *variant = getenv("GIT_SSH_VARIANT");
+       char *variant;
+
+       variant = xstrdup_or_null(getenv("GIT_SSH_VARIANT"));
+       if (!variant &&
+           git_config_get_string("ssh.variant", &variant))
+               return 0;
+
+       if (!strcmp(variant, "plink") || !strcmp(variant, "putty")) {
+               *port_option = 'P';
+               *needs_batch = 0;
+       } else if (!strcmp(variant, "tortoiseplink")) {
+               *port_option = 'P';
+               *needs_batch = 1;
+       } else {
+               *port_option = 'p';
+               *needs_batch = 0;
+       }
+       free(variant);
+       return 1;
+}
+
+static void handle_ssh_variant(const char *ssh_command, int is_cmdline,
+                              int *port_option, int *needs_batch)
+{
+       const char *variant;
        char *p = NULL;
 
-       if (variant)
-               ; /* okay, fall through */
-       else if (!git_config_get_string("ssh.variant", &p))
-               variant = p;
-       else if (!is_cmdline) {
+       if (override_ssh_variant(port_option, needs_batch))
+               return;
+
+       if (!is_cmdline) {
                p = xstrdup(ssh_command);
                variant = basename(p);
        } else {
@@ -717,12 +739,11 @@ static int handle_ssh_variant(const char *ssh_command, int is_cmdline,
                         */
                        free(ssh_argv);
                } else
-                       return 0;
+                       return;
        }
 
        if (!strcasecmp(variant, "plink") ||
-           !strcasecmp(variant, "plink.exe") ||
-           !strcasecmp(variant, "putty"))
+           !strcasecmp(variant, "plink.exe"))
                *port_option = 'P';
        else if (!strcasecmp(variant, "tortoiseplink") ||
                 !strcasecmp(variant, "tortoiseplink.exe")) {
@@ -730,8 +751,6 @@ static int handle_ssh_variant(const char *ssh_command, int is_cmdline,
                *needs_batch = 1;
        }
        free(p);
-
-       return 1;
 }
 
 /*