diff options
-rw-r--r-- | src/refdb.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/src/refdb.c b/src/refdb.c index 6879b6aab..fb86d5ccb 100644 --- a/src/refdb.c +++ b/src/refdb.c @@ -326,7 +326,7 @@ int git_refdb_should_write_reflog(int *out, git_refdb *db, const git_reference * int git_refdb_should_write_head_reflog(int *out, git_refdb *db, const git_reference *ref) { - git_reference *head = NULL, *peeled = NULL; + git_reference *head = NULL, *resolved = NULL; const char *name; int error; @@ -344,22 +344,15 @@ int git_refdb_should_write_head_reflog(int *out, git_refdb *db, const git_refere goto out; /* Go down the symref chain until we find the branch */ - while (git_reference_type(head) == GIT_REFERENCE_SYMBOLIC) { - if ((error = git_refdb_lookup(&peeled, db, git_reference_symbolic_target(head))) < 0) - break; - - git_reference_free(head); - head = peeled; - peeled = NULL; - } - - if (error < 0) { + if ((error = git_refdb_resolve(&resolved, db, git_reference_symbolic_target(head), -1)) < 0) { if (error != GIT_ENOTFOUND) goto out; error = 0; name = git_reference_symbolic_target(head); + } else if (git_reference_type(resolved) == GIT_REFERENCE_SYMBOLIC) { + name = git_reference_symbolic_target(resolved); } else { - name = git_reference_name(head); + name = git_reference_name(resolved); } if (strcmp(name, ref->name)) @@ -368,7 +361,7 @@ int git_refdb_should_write_head_reflog(int *out, git_refdb *db, const git_refere *out = 1; out: - git_reference_free(peeled); + git_reference_free(resolved); git_reference_free(head); return error; } |