diff options
author | Junio C Hamano <gitster@pobox.com> | 2007-06-12 20:48:21 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-06-12 20:48:21 -0700 |
commit | 44bdc434e830cea881eb908e32d80d5bc0c71d4f (patch) | |
tree | 9636baf35f9087a4f1c2b2efce1056989064f2e9 | |
parent | 2cf69cf6edbaa15ed47f9c73c0eb60ce7983ba6b (diff) | |
parent | e2ac7cb5fbcf1407003aa07cdcd14141527ea2e3 (diff) | |
download | git-44bdc434e830cea881eb908e32d80d5bc0c71d4f.tar.gz git-44bdc434e830cea881eb908e32d80d5bc0c71d4f.tar.xz |
Merge branch 'sv/objfixes' into maint
* sv/objfixes:
Don't assume tree entries that are not dirs are blobs
-rw-r--r-- | object.c | 3 | ||||
-rw-r--r-- | tree.c | 7 |
2 files changed, 9 insertions, 1 deletions
@@ -160,8 +160,11 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t parse_tag_buffer(tag, buffer, size); obj = &tag->object; } else { + warning("object %s has unknown type id %d\n", sha1_to_hex(sha1), type); obj = NULL; } + if (obj && obj->type == OBJ_NONE) + obj->type = type; *eaten_p = eaten; return obj; } @@ -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); |