Merge branch 'jk/submodule-fsck-loose-fixup'
authorJunio C Hamano <gitster@pobox.com>
Wed, 13 Jun 2018 19:50:44 +0000 (12:50 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 13 Jun 2018 19:50:44 +0000 (12:50 -0700)
Finishing touches to a topic that already is in 'maint'.

* jk/submodule-fsck-loose-fixup:
fsck: avoid looking at NULL blob->object
t7415: don't bother creating commit for symlink test

fsck.c
t/t7415-submodule-names.sh
diff --git a/fsck.c b/fsck.c
index bcae2c30e6531f6a71f518877a71d9a5a9b232ae..48e7e36869a7cbcb47e2e2a0401dd1047612e5d7 100644 (file)
--- a/fsck.c
+++ b/fsck.c
@@ -1036,7 +1036,8 @@ int fsck_finish(struct fsck_options *options)
 
                blob = lookup_blob(oid);
                if (!blob) {
-                       ret |= report(options, &blob->object,
+                       struct object *obj = lookup_unknown_object(oid->hash);
+                       ret |= report(options, obj,
                                      FSCK_MSG_GITMODULES_BLOB,
                                      "non-blob found at .gitmodules");
                        continue;
index a770d92a5592e5aab1760d0ff509f5ce3cc8e5d0..3c0f1a102a09e5c03cd6e270bbbf32d870b5c093 100755 (executable)
@@ -135,13 +135,10 @@ test_expect_success 'fsck detects symlinked .gitmodules file' '
                tricky="[foo]bar=true" &&
                content=$(git hash-object -w ../.gitmodules) &&
                target=$(printf "$tricky" | git hash-object -w --stdin) &&
-               tree=$(
-                       {
-                               printf "100644 blob $content\t$tricky\n" &&
-                               printf "120000 blob $target\t.gitmodules\n"
-                       } | git mktree
-               ) &&
-               commit=$(git commit-tree $tree) &&
+               {
+                       printf "100644 blob $content\t$tricky\n" &&
+                       printf "120000 blob $target\t.gitmodules\n"
+               } | git mktree &&
 
                # Check not only that we fail, but that it is due to the
                # symlink detector; this grep string comes from the config
@@ -151,4 +148,22 @@ test_expect_success 'fsck detects symlinked .gitmodules file' '
        )
 '
 
+test_expect_success 'fsck detects non-blob .gitmodules' '
+       git init non-blob &&
+       (
+               cd non-blob &&
+
+               # As above, make the funny tree directly to avoid index
+               # restrictions.
+               mkdir subdir &&
+               cp ../.gitmodules subdir/file &&
+               git add subdir/file &&
+               git commit -m ok &&
+               git ls-tree HEAD | sed s/subdir/.gitmodules/ | git mktree &&
+
+               test_must_fail git fsck 2>output &&
+               grep gitmodulesBlob output
+       )
+'
+
 test_done