From 5cb136705d7db2822357582d5b726c91ca044b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Wed, 23 Oct 2013 15:45:29 +0200 Subject: [PATCH] transport: let the progress output return an error There are any number of issues that can come up in the progress callback, and we should let the user cancel at that point as well. --- include/git2/remote.h | 2 +- include/git2/transport.h | 2 +- src/transports/smart_protocol.c | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/git2/remote.h b/include/git2/remote.h index 9858634cc..f4cd1cbfa 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -410,7 +410,7 @@ struct git_remote_callbacks { * progress side-band will be passed to this function (this is * the 'counting objects' output. */ - void (*progress)(const char *str, int len, void *data); + int (*progress)(const char *str, int len, void *data); /** * Completion is called when different parts of the download diff --git a/include/git2/transport.h b/include/git2/transport.h index 065b31820..b9fda80ba 100644 --- a/include/git2/transport.h +++ b/include/git2/transport.h @@ -170,7 +170,7 @@ typedef enum { GIT_TRANSPORTFLAGS_NO_CHECK_CERT = 1 } git_transport_flags_t; -typedef void (*git_transport_message_cb)(const char *str, int len, void *data); +typedef int (*git_transport_message_cb)(const char *str, int len, void *data); typedef struct git_transport git_transport; diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c index 24677908e..3b4d57856 100644 --- a/src/transports/smart_protocol.c +++ b/src/transports/smart_protocol.c @@ -509,7 +509,10 @@ int git_smart__download_pack( if (pkt->type == GIT_PKT_PROGRESS) { if (t->progress_cb) { git_pkt_progress *p = (git_pkt_progress *) pkt; - t->progress_cb(p->data, p->len, t->message_cb_payload); + if (t->progress_cb(p->data, p->len, t->message_cb_payload)) { + giterr_set(GITERR_NET, "The fetch was cancelled by the user"); + return GIT_EUSER; + } } git__free(pkt); } else if (pkt->type == GIT_PKT_DATA) {