mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-25 12:24:06 +00:00
Merge pull request #3137 from libgit2/cmn/server-errors
Improve server error reporting
This commit is contained in:
commit
c06e180a98
@ -45,6 +45,10 @@ support for HTTPS connections insead of OpenSSL.
|
|||||||
* The index now uses diffs for `add_all()` and `update_all()` which
|
* The index now uses diffs for `add_all()` and `update_all()` which
|
||||||
gives it a speed boost and closer semantics to git.
|
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
|
### API additions
|
||||||
|
|
||||||
@ -89,6 +93,11 @@ support for HTTPS connections insead of OpenSSL.
|
|||||||
* `git_stash_pop()` will apply a stashed state (like `git_stash_apply()`)
|
* `git_stash_pop()` will apply a stashed state (like `git_stash_apply()`)
|
||||||
but will remove the stashed state after a successful application.
|
but will remove the stashed state after a successful application.
|
||||||
|
|
||||||
|
* A new error code `GIT_EEOF` indicates an early EOF from the
|
||||||
|
server. This typically indicates an error with the URL or
|
||||||
|
configuration of the server, and tools can use this to show messages
|
||||||
|
about failing to communicate with the server.
|
||||||
|
|
||||||
### API removals
|
### API removals
|
||||||
|
|
||||||
* `git_remote_save()` and `git_remote_clear_refspecs()` has been
|
* `git_remote_save()` and `git_remote_clear_refspecs()` has been
|
||||||
|
@ -45,6 +45,7 @@ typedef enum {
|
|||||||
GIT_ECERTIFICATE = -17, /**< Server certificate is invalid */
|
GIT_ECERTIFICATE = -17, /**< Server certificate is invalid */
|
||||||
GIT_EAPPLIED = -18, /**< Patch/merge has already been applied */
|
GIT_EAPPLIED = -18, /**< Patch/merge has already been applied */
|
||||||
GIT_EPEEL = -19, /**< The requested peel operation is not possible */
|
GIT_EPEEL = -19, /**< The requested peel operation is not possible */
|
||||||
|
GIT_EEOF = -20, /**< Unexpected EOF */
|
||||||
|
|
||||||
GIT_PASSTHROUGH = -30, /**< Internal only */
|
GIT_PASSTHROUGH = -30, /**< Internal only */
|
||||||
GIT_ITEROVER = -31, /**< Signals end of iteration with iterator */
|
GIT_ITEROVER = -31, /**< Signals end of iteration with iterator */
|
||||||
|
@ -55,6 +55,7 @@ static int ssl_set_error(SSL *ssl, int error)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
giterr_set(GITERR_NET, "SSL error: received early EOF");
|
giterr_set(GITERR_NET, "SSL error: received early EOF");
|
||||||
|
return GIT_EEOF;
|
||||||
break;
|
break;
|
||||||
case SSL_ERROR_SSL:
|
case SSL_ERROR_SSL:
|
||||||
e = ERR_get_error();
|
e = ERR_get_error();
|
||||||
|
@ -52,7 +52,7 @@ int git_smart__store_refs(transport_smart *t, int flushes)
|
|||||||
|
|
||||||
if (recvd == 0 && !flush) {
|
if (recvd == 0 && !flush) {
|
||||||
giterr_set(GITERR_NET, "early EOF");
|
giterr_set(GITERR_NET, "early EOF");
|
||||||
return -1;
|
return GIT_EEOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
@ -770,7 +770,7 @@ static int parse_report(transport_smart *transport, git_push *push)
|
|||||||
|
|
||||||
if (recvd == 0) {
|
if (recvd == 0) {
|
||||||
giterr_set(GITERR_NET, "early EOF");
|
giterr_set(GITERR_NET, "early EOF");
|
||||||
return -1;
|
return GIT_EEOF;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -125,10 +125,21 @@ static int ssh_stream_read(
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if ((rc = libssh2_channel_read(s->channel, buffer, buf_size)) < LIBSSH2_ERROR_NONE) {
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we can't get anything out of stdout, it's typically a
|
||||||
|
* not-found error, so read from stderr and signal EOF on
|
||||||
|
* stderr.
|
||||||
|
*/
|
||||||
|
if (rc == 0 && (rc = libssh2_channel_read_stderr(s->channel, buffer, buf_size)) > 0) {
|
||||||
|
giterr_set(GITERR_SSH, "%*s", rc, buffer);
|
||||||
|
return GIT_EEOF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
*bytes_read = rc;
|
*bytes_read = rc;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user