diff options
| author | Vicent Marti <tanoku@gmail.com> | 2010-08-12 23:40:54 +0200 |
|---|---|---|
| committer | Vicent Marti <tanoku@gmail.com> | 2010-08-12 23:40:54 +0200 |
| commit | 9c9f4fc11c85d621dc5fdcf46bbcb5b5da9ed73f (patch) | |
| tree | b74a41b8df31f0fc88809d1d479742b3f5b3c192 /src/repository.c | |
| parent | f2408cc2efc1752bb34011a655f6acdab4e9e602 (diff) | |
| download | libgit2-9c9f4fc11c85d621dc5fdcf46bbcb5b5da9ed73f.tar.gz | |
Add support for manually freeing repo objects
A new method 'git_repository_object_free' allows to manually force the
freeing of a repository object, even though they are still automatically
managed by the repository and don't need to be freed by the user.
Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'src/repository.c')
| -rw-r--r-- | src/repository.c | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/src/repository.c b/src/repository.c index 58f29ce44..86f2216cb 100644 --- a/src/repository.c +++ b/src/repository.c @@ -83,28 +83,8 @@ void git_repository_free(git_repository *repo) git_hashtable_iterator_init(repo->objects, &it); while ((object = (git_repository_object *) - git_hashtable_iterator_next(&it)) != NULL) { - - git_obj_close(&object->dbo); - - switch (object->dbo.type) { - case GIT_OBJ_COMMIT: - git_commit__free((git_commit *)object); - break; - - case GIT_OBJ_TREE: - git_tree__free((git_tree *)object); - break; - - case GIT_OBJ_TAG: - git_tag__free((git_tag *)object); - break; - - default: - free(object); - break; - } - } + git_hashtable_iterator_next(&it)) != NULL) + git_repository_object_free(object); git_hashtable_free(repo->objects); /* TODO: free odb */ @@ -134,6 +114,30 @@ void git_repository__close_dbo(git_repository_object *object) } } +void git_repository_object_free(git_repository_object *object) +{ + git_hashtable_remove(object->repo->objects, &object->id); + git_obj_close(&object->dbo); + + switch (object->dbo.type) { + case GIT_OBJ_COMMIT: + git_commit__free((git_commit *)object); + break; + + case GIT_OBJ_TREE: + git_tree__free((git_tree *)object); + break; + + case GIT_OBJ_TAG: + git_tag__free((git_tag *)object); + break; + + default: + free(object); + break; + } +} + git_repository_object *git_repository_lookup(git_repository *repo, const git_oid *id, git_otype type) { static const size_t object_sizes[] = { |
