Check the return codes of remote callbacks.

The user may have requested that the operation be cancelled.
This commit is contained in:
Jacques Germishuys 2014-04-20 22:06:05 +02:00
parent 9effa2fb72
commit 4f62163ead
2 changed files with 10 additions and 7 deletions

View File

@ -455,8 +455,7 @@ struct git_remote_callbacks {
/** /**
* Textual progress from the remote. Text send over the * Textual progress from the remote. Text send over the
* progress side-band will be passed to this function (this is * progress side-band will be passed to this function (this is
* the 'counting objects' output. This callback should return a value less * the 'counting objects' output.
* than zero to cancel the operation.
*/ */
int (*progress)(const char *str, int len, void *data); int (*progress)(const char *str, int len, void *data);

View File

@ -882,10 +882,7 @@ static int stream_thunk(void *buf, size_t size, void *data)
if ((current_time - payload->last_progress_report_time) >= MIN_PROGRESS_UPDATE_INTERVAL) { if ((current_time - payload->last_progress_report_time) >= MIN_PROGRESS_UPDATE_INTERVAL) {
payload->last_progress_report_time = current_time; payload->last_progress_report_time = current_time;
if (payload->cb(payload->pb->nr_written, payload->pb->nr_objects, payload->last_bytes, payload->cb_payload)) { error = payload->cb(payload->pb->nr_written, payload->pb->nr_objects, payload->last_bytes, payload->cb_payload);
giterr_clear();
error = GIT_EUSER;
}
} }
} }
@ -957,7 +954,14 @@ int git_smart__push(git_transport *transport, git_push *push)
/* If progress is being reported write the final report */ /* If progress is being reported write the final report */
if (push->transfer_progress_cb) { if (push->transfer_progress_cb) {
push->transfer_progress_cb(push->pb->nr_written, push->pb->nr_objects, packbuilder_payload.last_bytes, push->transfer_progress_cb_payload); error = push->transfer_progress_cb(
push->pb->nr_written,
push->pb->nr_objects,
packbuilder_payload.last_bytes,
push->transfer_progress_cb_payload);
if (error < 0)
goto done;
} }
if (push->status.length) { if (push->status.length) {