diff options
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[] = { |