diff options
| author | Carlos Martín Nieto <carlos@cmartin.tk> | 2012-04-13 19:25:06 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <carlos@cmartin.tk> | 2012-04-13 22:19:45 +0200 |
| commit | 1c9c081a6a0e02ea8a148717083e3f7a769c5a2e (patch) | |
| tree | ce0404684becd4903233d8f0abd3a9a5af7c3c98 | |
| parent | 907ebe855602bcbed2bf1bb55647b4c1767614ba (diff) | |
| download | libgit2-1c9c081a6a0e02ea8a148717083e3f7a769c5a2e.tar.gz | |
indexer: add git_indexer_stream_free() and _hash()
| -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; |
