mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-06 03:06:13 +00:00
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.
This commit is contained in:
parent
5187b609ba
commit
7c1ee212b7
17
src/commit.c
17
src/commit.c
@ -455,19 +455,18 @@ int git_commit_nth_gen_ancestor(
|
||||
|
||||
assert(ancestor && commit);
|
||||
|
||||
current = (git_commit *)commit;
|
||||
if (git_object_dup((git_object **) ¤t, (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;
|
||||
|
Loading…
Reference in New Issue
Block a user