mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-02 14:38:04 +00:00
Add accessor for git_remote's stats field
Also converted the network example to use it.
This commit is contained in:
parent
3028be0723
commit
d57c47dc07
@ -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);
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user