diff options
| -rw-r--r-- | include/git2/indexer.h | 17 | ||||
| -rw-r--r-- | src/indexer.c | 29 |
2 files changed, 46 insertions, 0 deletions
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 @@ -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 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; |
