diff options
author | Carlos Martín Nieto <carlos@cmartin.tk> | 2012-04-13 10:29:27 +0200 |
---|---|---|
committer | Carlos Martín Nieto <carlos@cmartin.tk> | 2012-04-13 22:19:45 +0200 |
commit | 907ebe855602bcbed2bf1bb55647b4c1767614ba (patch) | |
tree | 464f7c303bd81655549d2e39d69b8baf9d515e24 /examples/network/index-pack.c | |
parent | 453ab98da06d57c7d41a9f3ddf945ae56d56890a (diff) | |
download | libgit2-907ebe855602bcbed2bf1bb55647b4c1767614ba.tar.gz |
examples: stream indexer example
Diffstat (limited to 'examples/network/index-pack.c')
-rw-r--r-- | examples/network/index-pack.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/examples/network/index-pack.c b/examples/network/index-pack.c index 671035fb7..881c1493f 100644 --- a/examples/network/index-pack.c +++ b/examples/network/index-pack.c @@ -13,6 +13,61 @@ int index_cb(const git_indexer_stats *stats, void *data) int index_pack(git_repository *repo, int argc, char **argv) { + git_indexer_stream *idx; + git_indexer_stats stats = {0, 0}; + int error, fd; + char hash[GIT_OID_HEXSZ + 1] = {0}; + ssize_t read_bytes; + char buf[512]; + + if (argc < 2) { + fprintf(stderr, "I need a packfile\n"); + return EXIT_FAILURE; + } + + if (git_indexer_stream_new(&idx, ".git") < 0) { + puts("bad idx"); + return -1; + } + + if ((fd = open(argv[1], 0)) < 0) { + perror("open"); + return -1; + } + + do { + read_bytes = read(fd, buf, sizeof(buf)); + if (read_bytes < 0) + break; + + if ((error = git_indexer_stream_add(idx, buf, read_bytes, &stats)) < 0) + goto cleanup; + + printf("\rIndexing %d of %d", stats.processed, stats.total); + } while (read_bytes > 0); + + if (read_bytes < 0) { + error = -1; + perror("failed reading"); + goto cleanup; + } + + if ((error = git_indexer_stream_finalize(idx, &stats)) < 0) + goto cleanup; + + printf("\rIndexing %d of %d\n", stats.processed, stats.total); + + git_oid_fmt(hash, git_indexer_stream_hash(idx)); + puts(hash); + +cleanup: + close(fd); + git_indexer_stream_free(idx); + return error; +} + +int index_pack_old(git_repository *repo, int argc, char **argv) +{ git_indexer *indexer; git_indexer_stats stats; int error; |