diff options
-rw-r--r-- | builtin-fsck.c | 21 | ||||
-rwxr-xr-x | t/t1450-fsck.sh | 12 |
2 files changed, 24 insertions, 9 deletions
diff --git a/builtin-fsck.c b/builtin-fsck.c index 2cfff43f33..64dffa5421 100644 --- a/builtin-fsck.c +++ b/builtin-fsck.c @@ -586,6 +586,7 @@ static struct option fsck_opts[] = { int cmd_fsck(int argc, const char **argv, const char *prefix) { int i, heads; + struct alternate_object_database *alt; errors_found = 0; @@ -597,17 +598,19 @@ int cmd_fsck(int argc, const char **argv, const char *prefix) fsck_head_link(); fsck_object_dir(get_object_directory()); + + prepare_alt_odb(); + for (alt = alt_odb_list; alt; alt = alt->next) { + char namebuf[PATH_MAX]; + int namelen = alt->name - alt->base; + memcpy(namebuf, alt->base, namelen); + namebuf[namelen - 1] = 0; + fsck_object_dir(namebuf); + } + if (check_full) { - struct alternate_object_database *alt; struct packed_git *p; - prepare_alt_odb(); - for (alt = alt_odb_list; alt; alt = alt->next) { - char namebuf[PATH_MAX]; - int namelen = alt->name - alt->base; - memcpy(namebuf, alt->base, namelen); - namebuf[namelen - 1] = 0; - fsck_object_dir(namebuf); - } + prepare_packed_git(); for (p = packed_git; p; p = p->next) /* verify gives error messages itself */ diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh index d3a17b4508..4597af0eb6 100755 --- a/t/t1450-fsck.sh +++ b/t/t1450-fsck.sh @@ -16,4 +16,16 @@ test_expect_success 'HEAD is part of refs' ' test 0 = $(git fsck | wc -l) ' +test_expect_success 'loose objects borrowed from alternate are not missing' ' + mkdir another && + ( + cd another && + git init && + echo ../../../.git/objects >.git/objects/info/alternates && + test_commit C fileC one && + git fsck >out && + ! grep "missing blob" out + ) +' + test_done |