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:
parent
23fcdc7971
commit
e2ac7cb5fb
3
object.c
3
object.c
@ -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
7
tree.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user