summaryrefslogtreecommitdiff
path: root/src/commit.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2010-08-12 19:59:32 +0200
committerVicent Marti <tanoku@gmail.com>2010-08-12 19:59:32 +0200
commitf2408cc2efc1752bb34011a655f6acdab4e9e602 (patch)
tree5ad89644ea67cafa1193d885be796fc90b08088c /src/commit.c
parent0e465f979bd946d7476c86cfaa912d0737f54682 (diff)
downloadlibgit2-f2408cc2efc1752bb34011a655f6acdab4e9e602.tar.gz
Fix object handling in git_repository
All loaded objects through git_repository_lookup are properly parsed & free'd on failure. Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'src/commit.c')
-rw-r--r--src/commit.c25
1 files changed, 5 insertions, 20 deletions
diff --git a/src/commit.c b/src/commit.c
index 1ffbc72ca..8a3eb5ff9 100644
--- a/src/commit.c
+++ b/src/commit.c
@@ -53,9 +53,6 @@ void git_commit__free(git_commit *commit)
{
clear_parents(commit);
- if (commit->odb_open)
- git_obj_close(&commit->odb_object);
-
free(commit->author);
free(commit->committer);
free(commit->message);
@@ -72,26 +69,14 @@ int git_commit__parse(git_commit *commit, unsigned int parse_flags, int close_db
{
int error = 0;
- if (!commit->odb_open) {
- error = git_odb_read(&commit->odb_object, commit->object.repo->db, &commit->object.id);
- if (error < 0)
- return error;
-
- if (commit->odb_object.type != GIT_OBJ_COMMIT) {
- git_obj_close(&commit->odb_object);
- return GIT_EOBJTYPE;
- }
-
- commit->odb_open = 1;
- }
+ if ((error = git_repository__open_dbo((git_repository_object *)commit)) < 0)
+ return error;
error = git_commit__parse_buffer(commit,
- commit->odb_object.data, commit->odb_object.len, parse_flags);
+ commit->object.dbo.data, commit->object.dbo.len, parse_flags);
- if (close_db_object) {
- git_obj_close(&commit->odb_object);
- commit->odb_open = 0;
- }
+ if (close_db_object)
+ git_repository__close_dbo((git_repository_object *)commit);
return error;
}