Teach fsck to not treat missing objects provided on the CLI as an error when extensions.lazyobject is set. Signed-off-by: Jonathan Tan <jonathantanmy@xxxxxxxxxx> --- builtin/fsck.c | 2 ++ t/t0410-lazy-object.sh | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/builtin/fsck.c b/builtin/fsck.c index 238532cc2..592e64172 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -755,6 +755,8 @@ int cmd_fsck(int argc, const char **argv, const char *prefix) struct object *obj = lookup_object(oid.hash); if (!obj || !(obj->flags & HAS_OBJ)) { + if (repository_format_lazy_object) + continue; error("%s: object missing", oid_to_hex(&oid)); errors_found |= ERROR_OBJECT; continue; diff --git a/t/t0410-lazy-object.sh b/t/t0410-lazy-object.sh index 45f665a15..3ac61c1c5 100755 --- a/t/t0410-lazy-object.sh +++ b/t/t0410-lazy-object.sh @@ -76,4 +76,20 @@ test_expect_success '...but succeeds if lazyobject is set' ' git -C repo fsck ' +test_expect_success 'fsck fails on lazy object directly given in command-line' ' + rm -rf repo && + test_create_repo repo && + test_commit -C repo 1 && + HASH=$(git hash-object repo/1.t) && + delete_object repo "$HASH" && + + test_must_fail git -C repo fsck "$HASH" +' + +test_expect_success '...but succeeds if lazyobject is set' ' + git -C repo config core.repositoryformatversion 1 && + git -C repo config extensions.lazyobject "arbitrary string" && + git -C repo fsck "$HASH" +' + test_done -- 2.14.0.rc0.400.g1c36432dff-goog