diff options
Diffstat (limited to 'tree.c')
-rw-r--r-- | tree.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -157,7 +157,7 @@ static void track_tree_refs(struct tree *item) /* Count how many entries there are.. */ init_tree_desc(&desc, item->buffer, item->size); while (tree_entry(&desc, &entry)) { - if (S_ISDIRLNK(entry.mode)) + if (S_ISGITLINK(entry.mode)) continue; n_refs++; } @@ -169,12 +169,17 @@ static void track_tree_refs(struct tree *item) while (tree_entry(&desc, &entry)) { struct object *obj; - if (S_ISDIRLNK(entry.mode)) + if (S_ISGITLINK(entry.mode)) 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); |