read_raw_ref(): don't get confused by an empty directory

Even if there is an empty directory where we look for the loose version
of a reference, check for a packed reference before giving up. This
fixes the failing test that was introduced two commits ago.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
This commit is contained in:
Michael Haggerty 2016-05-05 14:09:41 +02:00
parent 5387c0d883
commit e167a5673e
2 changed files with 11 additions and 2 deletions

View 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;
}

View file

@ -106,7 +106,7 @@ test_expect_success 'one new ref is a simple prefix of another' '
'
test_expect_failure 'empty directory should not fool rev-parse' '
test_expect_success 'empty directory should not fool rev-parse' '
prefix=refs/e-rev-parse &&
git update-ref $prefix/foo $C &&
git pack-refs --all &&