summaryrefslogtreecommitdiff
path: root/src/repository.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/repository.c')
-rw-r--r--src/repository.c48
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[] = {