Commit 907ebe855602bcbed2bf1bb55647b4c1767614ba

Carlos Martín Nieto 2012-04-13T10:29:27

examples: stream indexer example

diff --git a/examples/network/index-pack.c b/examples/network/index-pack.c
index 671035f..881c149 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;