mirror of
https://github.com/git/git.git
synced 2026-02-02 22:12:23 +00:00
Merge pull request #1006 from segevfiner/git-ssh-command-putty
connect: recognize [tortoise]plink in GIT_SSH_COMMAND
This commit is contained in:
21
connect.c
21
connect.c
@@ -772,6 +772,7 @@ struct child_process *git_connect(int fd[2], const char *url,
|
||||
int putty = 0, tortoiseplink = 0;
|
||||
char *ssh_host = hostandport;
|
||||
const char *port = NULL;
|
||||
char *ssh_argv0 = NULL;
|
||||
transport_check_allowed("ssh");
|
||||
get_host_and_port(&ssh_host, &port);
|
||||
|
||||
@@ -792,10 +793,15 @@ struct child_process *git_connect(int fd[2], const char *url,
|
||||
}
|
||||
|
||||
ssh = get_ssh_command();
|
||||
if (!ssh) {
|
||||
const char *base;
|
||||
char *ssh_dup;
|
||||
if (ssh) {
|
||||
char *split_ssh = xstrdup(ssh);
|
||||
const char **ssh_argv;
|
||||
|
||||
if (split_cmdline(split_ssh, &ssh_argv))
|
||||
ssh_argv0 = xstrdup(ssh_argv[0]);
|
||||
free(split_ssh);
|
||||
free((void *)ssh_argv);
|
||||
} else {
|
||||
/*
|
||||
* GIT_SSH is the no-shell version of
|
||||
* GIT_SSH_COMMAND (and must remain so for
|
||||
@@ -807,8 +813,11 @@ struct child_process *git_connect(int fd[2], const char *url,
|
||||
if (!ssh)
|
||||
ssh = "ssh";
|
||||
|
||||
ssh_dup = xstrdup(ssh);
|
||||
base = basename(ssh_dup);
|
||||
ssh_argv0 = xstrdup(ssh);
|
||||
}
|
||||
|
||||
if (ssh_argv0) {
|
||||
const char *base = basename(ssh_argv0);
|
||||
|
||||
tortoiseplink = !strcasecmp(base, "tortoiseplink") ||
|
||||
!strcasecmp(base, "tortoiseplink.exe");
|
||||
@@ -816,7 +825,7 @@ struct child_process *git_connect(int fd[2], const char *url,
|
||||
!strcasecmp(base, "plink") ||
|
||||
!strcasecmp(base, "plink.exe");
|
||||
|
||||
free(ssh_dup);
|
||||
free(ssh_argv0);
|
||||
}
|
||||
|
||||
argv_array_push(&conn->args, ssh);
|
||||
|
||||
@@ -386,6 +386,21 @@ test_expect_success 'tortoiseplink is like putty, with extra arguments' '
|
||||
expect_ssh "-batch -P 123" myhost src
|
||||
'
|
||||
|
||||
test_expect_success 'double quoted plink.exe in GIT_SSH_COMMAND' '
|
||||
copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink.exe" &&
|
||||
GIT_SSH_COMMAND="\"$TRASH_DIRECTORY/plink.exe\" -v" \
|
||||
git clone "[myhost:123]:src" ssh-bracket-clone-plink-3 &&
|
||||
expect_ssh "-v -P 123" myhost src
|
||||
'
|
||||
|
||||
SQ="'"
|
||||
test_expect_success 'single quoted plink.exe in GIT_SSH_COMMAND' '
|
||||
copy_ssh_wrapper_as "$TRASH_DIRECTORY/plink.exe" &&
|
||||
GIT_SSH_COMMAND="$SQ$TRASH_DIRECTORY/plink.exe$SQ -v" \
|
||||
git clone "[myhost:123]:src" ssh-bracket-clone-plink-4 &&
|
||||
expect_ssh "-v -P 123" myhost src
|
||||
'
|
||||
|
||||
# Reset the GIT_SSH environment variable for clone tests.
|
||||
setup_ssh_wrapper
|
||||
|
||||
|
||||
Reference in New Issue
Block a user