git-clone: split up long &&-command-chain and use a function for cleanup
[gitweb.git] / tree.c
diff --git a/tree.c b/tree.c
index a3728270b4027cd56e09e1a56ec17e177d0a6998..04fe653a8e25feb0fc15f76ba487d0f8dbd52f82 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -173,8 +173,13 @@ static void track_tree_refs(struct tree *item)
                        continue;
                if (S_ISDIR(entry.mode))
                        obj = &lookup_tree(entry.sha1)->object;
-               else
+               else if (S_ISREG(entry.mode) || S_ISLNK(entry.mode))
                        obj = &lookup_blob(entry.sha1)->object;
+               else {
+                       warning("in tree %s: entry %s has bad mode %.6o\n",
+                            sha1_to_hex(item->object.sha1), entry.path, entry.mode);
+                       obj = lookup_unknown_object(entry.sha1);
+               }
                refs->ref[i++] = obj;
        }
        set_object_refs(&item->object, refs);