read_raw_ref(): don't get confused by an empty directory
[gitweb.git] / refs / files-backend.c
index ad9cd86457c4795d52f578687306afec65548d54..0cc116d67c3ad064da1511a0848b8a46baff865e 100644 (file)
@@ -1477,7 +1477,16 @@ int read_raw_ref(const char *refname, unsigned char *sha1,
 
        /* Is it a directory? */
        if (S_ISDIR(st.st_mode)) {
-               errno = EISDIR;
+               /*
+                * Even though there is a directory where the loose
+                * ref is supposed to be, there could still be a
+                * packed ref:
+                */
+               if (resolve_missing_loose_ref(refname, sha1, flags)) {
+                       errno = EISDIR;
+                       goto out;
+               }
+               ret = 0;
                goto out;
        }