Commit d57c47dc by Ben Straub

Add accessor for git_remote's stats field

Also converted the network example to use it.
parent 3028be07
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
struct dl_data { struct dl_data {
git_remote *remote; git_remote *remote;
git_off_t *bytes; git_off_t *bytes;
git_indexer_stats *stats;
int ret; int ret;
int finished; int finished;
}; };
...@@ -35,7 +34,7 @@ static void *download(void *ptr) ...@@ -35,7 +34,7 @@ static void *download(void *ptr)
// Download the packfile and index it. This function updates the // Download the packfile and index it. This function updates the
// amount of received data and the indexer stats which lets you // amount of received data and the indexer stats which lets you
// inform the user about progress. // inform the user about progress.
if (git_remote_download(data->remote, data->bytes, data->stats) < 0) { if (git_remote_download(data->remote, data->bytes) < 0) {
data->ret = -1; data->ret = -1;
goto exit; goto exit;
} }
...@@ -70,14 +69,14 @@ int fetch(git_repository *repo, int argc, char **argv) ...@@ -70,14 +69,14 @@ int fetch(git_repository *repo, int argc, char **argv)
{ {
git_remote *remote = NULL; git_remote *remote = NULL;
git_off_t bytes = 0; git_off_t bytes = 0;
git_indexer_stats stats; const git_indexer_stats *stats;
pthread_t worker; pthread_t worker;
struct dl_data data; struct dl_data data;
git_remote_callbacks callbacks; git_remote_callbacks callbacks;
argc = argc; argc = argc;
// Figure out whether it's a named remote or a URL // Figure out whether it's a named remote or a URL
printf("Fetching %s\n", argv[1]); printf("Fetching %s for repo %p\n", argv[1], repo);
if (git_remote_load(&remote, repo, argv[1]) < 0) { if (git_remote_load(&remote, repo, argv[1]) < 0) {
if (git_remote_new(&remote, repo, NULL, argv[1], NULL) < 0) if (git_remote_new(&remote, repo, NULL, argv[1], NULL) < 0)
return -1; return -1;
...@@ -92,10 +91,10 @@ int fetch(git_repository *repo, int argc, char **argv) ...@@ -92,10 +91,10 @@ int fetch(git_repository *repo, int argc, char **argv)
// Set up the information for the background worker thread // Set up the information for the background worker thread
data.remote = remote; data.remote = remote;
data.bytes = &bytes; data.bytes = &bytes;
data.stats = &stats;
data.ret = 0; data.ret = 0;
data.finished = 0; data.finished = 0;
memset(&stats, 0, sizeof(stats));
stats = git_remote_stats(remote);
pthread_create(&worker, NULL, download, &data); pthread_create(&worker, NULL, download, &data);
...@@ -106,16 +105,16 @@ int fetch(git_repository *repo, int argc, char **argv) ...@@ -106,16 +105,16 @@ int fetch(git_repository *repo, int argc, char **argv)
do { do {
usleep(10000); usleep(10000);
if (stats.total > 0) if (stats->total > 0)
printf("Received %d/%d objects (%d) in %d bytes\r", printf("Received %d/%d objects (%d) in %d bytes\r",
stats.received, stats.total, stats.processed, bytes); stats->received, stats->total, stats->processed, bytes);
} while (!data.finished); } while (!data.finished);
if (data.ret < 0) if (data.ret < 0)
goto on_error; goto on_error;
pthread_join(worker, NULL); pthread_join(worker, NULL);
printf("\rReceived %d/%d objects in %zu bytes\n", stats.processed, stats.total, bytes); printf("\rReceived %d/%d objects in %zu bytes\n", stats->processed, stats->total, bytes);
// Disconnect the underlying connection to prevent from idling. // Disconnect the underlying connection to prevent from idling.
git_remote_disconnect(remote); git_remote_disconnect(remote);
......
...@@ -313,6 +313,11 @@ struct git_remote_callbacks { ...@@ -313,6 +313,11 @@ struct git_remote_callbacks {
*/ */
GIT_EXTERN(void) git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks); GIT_EXTERN(void) git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks);
/**
* Get the statistics structure that is filled in by the fetch operation.
*/
GIT_EXTERN(const git_indexer_stats *) git_remote_stats(git_remote *remote);
enum { enum {
GIT_REMOTE_DOWNLOAD_TAGS_UNSET, GIT_REMOTE_DOWNLOAD_TAGS_UNSET,
GIT_REMOTE_DOWNLOAD_TAGS_NONE, GIT_REMOTE_DOWNLOAD_TAGS_NONE,
......
...@@ -703,6 +703,12 @@ void git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callback ...@@ -703,6 +703,12 @@ void git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callback
} }
} }
inline const git_indexer_stats* git_remote_stats(git_remote *remote)
{
assert(remote);
return &remote->stats;
}
int git_remote_autotag(git_remote *remote) int git_remote_autotag(git_remote *remote)
{ {
return remote->download_tags; return remote->download_tags;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment