Commit 7c1ee212 by Carlos Martín Nieto

commit: simplify and correct refcounting in nth_gen_ancestor

We can make use of git_object_dup to use refcounting instead of pointer
comparison to make sure we don't free the caller's object.

This also lets us simplify the case for '~0' which is now just an
assignment instead of looking up the object we have at hand.
parent 5187b609
......@@ -455,19 +455,18 @@ int git_commit_nth_gen_ancestor(
assert(ancestor && commit);
current = (git_commit *)commit;
if (git_object_dup((git_object **) &current, (git_object *) commit) < 0)
return -1;
if (n == 0)
return git_commit_lookup(
ancestor,
commit->object.repo,
git_object_id((const git_object *)commit));
if (n == 0) {
*ancestor = current;
return 0;
}
while (n--) {
error = git_commit_parent(&parent, (git_commit *)current, 0);
error = git_commit_parent(&parent, current, 0);
if (current != commit)
git_commit_free(current);
git_commit_free(current);
if (error < 0)
return error;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment