mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-02 18:10:10 +00:00
Add clone to the network example.
This commit is contained in:
parent
f1587b97a1
commit
84595a30c0
@ -8,6 +8,7 @@ OBJECTS = \
|
||||
git2.o \
|
||||
ls-remote.o \
|
||||
fetch.o \
|
||||
clone.o \
|
||||
index-pack.o
|
||||
|
||||
all: $(OBJECTS)
|
||||
|
||||
69
examples/network/clone.c
Normal file
69
examples/network/clone.c
Normal file
@ -0,0 +1,69 @@
|
||||
#include "common.h"
|
||||
#include <git2.h>
|
||||
#include <git2/clone.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
|
||||
struct dl_data {
|
||||
git_indexer_stats fetch_stats;
|
||||
git_indexer_stats checkout_stats;
|
||||
git_checkout_opts opts;
|
||||
int ret;
|
||||
int finished;
|
||||
const char *url;
|
||||
const char *path;
|
||||
};
|
||||
|
||||
static void *clone_thread(void *ptr)
|
||||
{
|
||||
struct dl_data *data = (struct dl_data *)ptr;
|
||||
git_repository *repo = NULL;
|
||||
|
||||
// Kick off the clone
|
||||
data->ret = git_clone(&repo, data->url, data->path,
|
||||
&data->fetch_stats, &data->checkout_stats,
|
||||
&data->opts);
|
||||
if (repo) git_repository_free(repo);
|
||||
data->finished = 1;
|
||||
|
||||
pthread_exit(&data->ret);
|
||||
}
|
||||
|
||||
int clone(git_repository *repo, int argc, char **argv)
|
||||
{
|
||||
struct dl_data data = {0};
|
||||
pthread_t worker;
|
||||
|
||||
// Validate args
|
||||
printf("argc %d\n");
|
||||
if (argc < 3) {
|
||||
printf("USAGE: %s <url> <path>\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Data for background thread
|
||||
data.url = argv[1];
|
||||
data.path = argv[2];
|
||||
data.opts.disable_filters = 1;
|
||||
printf("Cloning '%s' to '%s'\n", data.url, data.path);
|
||||
|
||||
// Create the worker thread
|
||||
pthread_create(&worker, NULL, clone_thread, &data);
|
||||
|
||||
// Watch for progress information
|
||||
do {
|
||||
usleep(10000);
|
||||
printf("Fetch %d/%d – Checkout %d/%d\n",
|
||||
data.fetch_stats.processed, data.fetch_stats.total,
|
||||
data.checkout_stats.processed, data.checkout_stats.total);
|
||||
} while (!data.finished);
|
||||
printf("Fetch %d/%d – Checkout %d/%d\n",
|
||||
data.fetch_stats.processed, data.fetch_stats.total,
|
||||
data.checkout_stats.processed, data.checkout_stats.total);
|
||||
|
||||
return data.ret;
|
||||
}
|
||||
|
||||
@ -10,5 +10,6 @@ int parse_pkt_line(git_repository *repo, int argc, char **argv);
|
||||
int show_remote(git_repository *repo, int argc, char **argv);
|
||||
int fetch(git_repository *repo, int argc, char **argv);
|
||||
int index_pack(git_repository *repo, int argc, char **argv);
|
||||
int clone(git_repository *repo, int argc, char **argv);
|
||||
|
||||
#endif /* __COMMON_H__ */
|
||||
|
||||
@ -12,6 +12,7 @@ struct {
|
||||
} commands[] = {
|
||||
{"ls-remote", ls_remote},
|
||||
{"fetch", fetch},
|
||||
{"clone", clone},
|
||||
{"index-pack", index_pack},
|
||||
{ NULL, NULL}
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user