From 907ebe855602bcbed2bf1bb55647b4c1767614ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Fri, 13 Apr 2012 10:29:27 +0200 Subject: [PATCH] examples: stream indexer example --- examples/network/index-pack.c | 55 +++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) 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 @@ -12,6 +12,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;