Don't assume tree entries that are not dirs are blobs

When scanning the trees in track_tree_refs() there is a "lazy" test
that assumes that entries are either directories or files.  Don't do
that.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Sam Vilain 2007-06-06 22:25:17 +12:00 committed by Junio C Hamano
parent 23fcdc7971
commit e2ac7cb5fb
2 changed files with 9 additions and 1 deletions

View File

@ -160,8 +160,11 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t
parse_tag_buffer(tag, buffer, size); parse_tag_buffer(tag, buffer, size);
obj = &tag->object; obj = &tag->object;
} else { } else {
warning("object %s has unknown type id %d\n", sha1_to_hex(sha1), type);
obj = NULL; obj = NULL;
} }
if (obj && obj->type == OBJ_NONE)
obj->type = type;
*eaten_p = eaten; *eaten_p = eaten;
return obj; return obj;
} }

7
tree.c
View File

@ -173,8 +173,13 @@ static void track_tree_refs(struct tree *item)
continue; continue;
if (S_ISDIR(entry.mode)) if (S_ISDIR(entry.mode))
obj = &lookup_tree(entry.sha1)->object; obj = &lookup_tree(entry.sha1)->object;
else else if (S_ISREG(entry.mode) || S_ISLNK(entry.mode))
obj = &lookup_blob(entry.sha1)->object; 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; refs->ref[i++] = obj;
} }
set_object_refs(&item->object, refs); set_object_refs(&item->object, refs);