From e3435673b8ed862266b5351b9e18cb55ed55d335 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Mon, 18 May 2015 15:51:55 +0200 Subject: [PATCH] ssh: read from stderr if stdout is empty When we fail to read from stdout, it's typically because the URL was wrong and the server process has sent some output over its stderr output. Read that output and set the error message to whatever we read from it. --- CHANGELOG.md | 4 ++++ src/transports/ssh.c | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 810538c64..ad127aa55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,10 @@ support for HTTPS connections insead of OpenSSL. * The index now uses diffs for `add_all()` and `update_all()` which gives it a speed boost and closer semantics to git. +* The ssh transport now reports the stderr output from the server as + the error message, which allows you to get the "repository not + found" messages. + ### API additions diff --git a/src/transports/ssh.c b/src/transports/ssh.c index c5b081151..0d179e715 100644 --- a/src/transports/ssh.c +++ b/src/transports/ssh.c @@ -125,10 +125,17 @@ static int ssh_stream_read( return -1; if ((rc = libssh2_channel_read(s->channel, buffer, buf_size)) < LIBSSH2_ERROR_NONE) { - ssh_error(s->session, "SSH could not read data");; + ssh_error(s->session, "SSH could not read data"); return -1; } + /* Having something in stderr is typically a not-found error */ + if (rc == 0 && (rc = libssh2_channel_read_stderr(s->channel, buffer, buf_size)) > 0) { + giterr_set(GITERR_SSH, "%*s", rc, buffer); + return -1; + } + + *bytes_read = rc; return 0;