From 1c9c081a6a0e02ea8a148717083e3f7a769c5a2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Fri, 13 Apr 2012 19:25:06 +0200 Subject: [PATCH] indexer: add git_indexer_stream_free() and _hash() --- include/git2/indexer.h | 17 +++++++++++++++++ src/indexer.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/include/git2/indexer.h b/include/git2/indexer.h index 8490ef0c8..a70fab214 100644 --- a/include/git2/indexer.h +++ b/include/git2/indexer.h @@ -52,6 +52,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 * diff --git a/src/indexer.c b/src/indexer.c index 744634205..1834d9884 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;