diff options
author | Ben Straub <bs@github.com> | 2012-10-16 13:29:12 -0700 |
---|---|---|
committer | Ben Straub <bs@github.com> | 2012-10-19 19:34:15 -0700 |
commit | d57c47dc07044b4fd3f5e9d57615329692823111 (patch) | |
tree | 4148ff7f84ad40973a6414c29a41259c5f151010 | |
parent | 3028be0723f42f31b1973da9f19f2b0468b11754 (diff) | |
download | libgit2-d57c47dc07044b4fd3f5e9d57615329692823111.tar.gz |
Add accessor for git_remote's stats field
Also converted the network example to use it.
-rw-r--r-- | examples/network/fetch.c | 17 | ||||
-rw-r--r-- | include/git2/remote.h | 5 | ||||
-rw-r--r-- | src/remote.c | 6 |
3 files changed, 19 insertions, 9 deletions
diff --git a/examples/network/fetch.c b/examples/network/fetch.c index fa941b97a..6c342be96 100644 --- a/examples/network/fetch.c +++ b/examples/network/fetch.c @@ -9,7 +9,6 @@ struct dl_data { git_remote *remote; git_off_t *bytes; - git_indexer_stats *stats; int ret; int finished; }; @@ -35,7 +34,7 @@ static void *download(void *ptr) // Download the packfile and index it. This function updates the // amount of received data and the indexer stats which lets you // 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; goto exit; } @@ -70,14 +69,14 @@ int fetch(git_repository *repo, int argc, char **argv) { git_remote *remote = NULL; git_off_t bytes = 0; - git_indexer_stats stats; + const git_indexer_stats *stats; pthread_t worker; struct dl_data data; git_remote_callbacks callbacks; argc = argc; // 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_new(&remote, repo, NULL, argv[1], NULL) < 0) return -1; @@ -92,10 +91,10 @@ int fetch(git_repository *repo, int argc, char **argv) // Set up the information for the background worker thread data.remote = remote; data.bytes = &bytes; - data.stats = &stats; data.ret = 0; data.finished = 0; - memset(&stats, 0, sizeof(stats)); + + stats = git_remote_stats(remote); pthread_create(&worker, NULL, download, &data); @@ -106,16 +105,16 @@ int fetch(git_repository *repo, int argc, char **argv) do { usleep(10000); - if (stats.total > 0) + if (stats->total > 0) 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); if (data.ret < 0) goto on_error; 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. git_remote_disconnect(remote); diff --git a/include/git2/remote.h b/include/git2/remote.h index ecd597518..9327320b4 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -313,6 +313,11 @@ struct git_remote_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 { GIT_REMOTE_DOWNLOAD_TAGS_UNSET, GIT_REMOTE_DOWNLOAD_TAGS_NONE, diff --git a/src/remote.c b/src/remote.c index 82ab22f4a..4b4044196 100644 --- a/src/remote.c +++ b/src/remote.c @@ -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) { return remote->download_tags; |