Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Don't assume tree entries that are not dirs are blobs
author
Sam Vilain
<sam.vilain@catalyst.net.nz>
Wed, 6 Jun 2007 10:25:17 +0000
(22:25 +1200)
committer
Junio C Hamano
<gitster@pobox.com>
Wed, 6 Jun 2007 22:43:18 +0000
(15:43 -0700)
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>
object.c
patch
|
blob
|
history
tree.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
23fcdc7
)
diff --git
a/object.c
b/object.c
index cfc4969ed9ba0ccfdba8f97637bac20be31d1eba..16793d9958a57664233b9e4468e112dfa1a8a915 100644
(file)
--- a/
object.c
+++ b/
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);
obj = &tag->object;
} else {
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;
}
obj = NULL;
}
+ if (obj && obj->type == OBJ_NONE)
+ obj->type = type;
*eaten_p = eaten;
return obj;
}
*eaten_p = eaten;
return obj;
}
diff --git
a/tree.c
b/tree.c
index e4a39aa3c36964c9034d2393a8b9cb483d1543da..e946dac06938b44ce13d7e30dd93e26eda75e5ef 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;
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;
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);
refs->ref[i++] = obj;
}
set_object_refs(&item->object, refs);