indexer: add git_indexer_stream_free() and _hash()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
diff --git a/include/git2/indexer.h b/include/git2/indexer.h
index 8490ef0..a70fab2 100644
--- a/include/git2/indexer.h
+++ b/include/git2/indexer.h
@@ -53,6 +53,23 @@ GIT_EXTERN(int) git_indexer_stream_add(git_indexer_stream *idx, void *data, size
GIT_EXTERN(int) git_indexer_stream_finalize(git_indexer_stream *idx, git_indexer_stats *stats);
/**
+ * Get the packfile's hash
+ *
+ * A packfile's name is derived from the sorted hashing of all object
+ * names. This is only correct after the index has been finalized.
+ *
+ * @param idx the indexer instance
+ */
+GIT_EXTERN(const git_oid *) git_indexer_stream_hash(git_indexer_stream *idx);
+
+/**
+ * Free the indexer and its resources
+ *
+ * @param idx the indexer to free
+ */
+GIT_EXTERN(void) git_indexer_stream_free(git_indexer_stream *idx);
+
+/**
* Create a new indexer instance
*
* @param out where to store the indexer instance
diff --git a/src/indexer.c b/src/indexer.c
index 7446342..1834d98 100644
--- a/src/indexer.c
+++ b/src/indexer.c
@@ -60,6 +60,11 @@ const git_oid *git_indexer_hash(git_indexer *idx)
return &idx->hash;
}
+const git_oid *git_indexer_stream_hash(git_indexer_stream *idx)
+{
+ return &idx->hash;
+}
+
static int open_pack(struct git_pack_file **out, const char *filename)
{
size_t namelen;
@@ -544,6 +549,30 @@ on_error:
return -1;
}
+void git_indexer_stream_free(git_indexer_stream *idx)
+{
+ unsigned int i;
+ struct entry *e;
+ struct git_pack_entry *pe;
+ struct delta_info *delta;
+
+ if (idx == NULL)
+ return;
+
+ p_close(idx->pack->mwf.fd);
+ git_vector_foreach(&idx->objects, i, e)
+ git__free(e);
+ git_vector_free(&idx->objects);
+ git_vector_foreach(&idx->pack->cache, i, pe)
+ git__free(pe);
+ git_vector_free(&idx->pack->cache);
+ git_vector_foreach(&idx->deltas, i, delta)
+ git__free(delta);
+ git_vector_free(&idx->deltas);
+ git__free(idx->pack);
+ git__free(idx);
+}
+
int git_indexer_new(git_indexer **out, const char *packname)
{
git_indexer *idx;