summaryrefslogtreecommitdiff
path: root/examples/network/index-pack.c
diff options
context:
space:
mode:
authorCarlos Martín Nieto <carlos@cmartin.tk>2012-04-13 10:29:27 +0200
committerCarlos Martín Nieto <carlos@cmartin.tk>2012-04-13 22:19:45 +0200
commit907ebe855602bcbed2bf1bb55647b4c1767614ba (patch)
tree464f7c303bd81655549d2e39d69b8baf9d515e24 /examples/network/index-pack.c
parent453ab98da06d57c7d41a9f3ddf945ae56d56890a (diff)
downloadlibgit2-907ebe855602bcbed2bf1bb55647b4c1767614ba.tar.gz
examples: stream indexer example
Diffstat (limited to 'examples/network/index-pack.c')
-rw-r--r--examples/network/index-pack.c55
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;