summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Haggerty <mhagger@alum.mit.edu>2015-06-03 15:51:58 +0200
committerJunio C Hamano <gitster@pobox.com>2015-06-03 11:44:25 -0700
commitf5517074f8f5cecc773b2ff927be4a059f2c9db0 (patch)
treeeeb57f600f2713cbf0042b40beaa90eb57767d95
parent8afc493d115e35092be8de3a441317f175928ab5 (diff)
downloadgit-f5517074f8f5cecc773b2ff927be4a059f2c9db0.tar.gz
read_loose_refs(): simplify function logic
Make it clearer that there are two possible ways to read the reference, but that we handle read errors uniformly regardless of which way it was read. This refactoring also makes the following change easier to implement. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--refs.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/refs.c b/refs.c
index 3a26ad4e65..3c311d44c1 100644
--- a/refs.c
+++ b/refs.c
@@ -1281,19 +1281,24 @@ static void read_loose_refs(const char *dirname, struct ref_dir *dir)
create_dir_entry(refs, refname.buf,
refname.len, 1));
} else {
+ int read_ok;
+
if (*refs->name) {
hashclr(sha1);
flag = 0;
- if (resolve_gitlink_ref(refs->name, refname.buf, sha1) < 0) {
- hashclr(sha1);
- flag |= REF_ISBROKEN;
- }
- } else if (read_ref_full(refname.buf,
- RESOLVE_REF_READING,
- sha1, &flag)) {
+ read_ok = !resolve_gitlink_ref(refs->name,
+ refname.buf, sha1);
+ } else {
+ read_ok = !read_ref_full(refname.buf,
+ RESOLVE_REF_READING,
+ sha1, &flag);
+ }
+
+ if (!read_ok) {
hashclr(sha1);
flag |= REF_ISBROKEN;
}
+
if (check_refname_format(refname.buf,
REFNAME_ALLOW_ONELEVEL)) {
hashclr(sha1);