diff options
author | Linus Torvalds <torvalds@osdl.org> | 2006-05-29 12:20:14 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-05-29 19:08:29 -0700 |
commit | f75e53edb38c97c8b21b69d4fc00d5419199ae4b (patch) | |
tree | f260260fcfa6de28e4a83fadfd93c1ab725a1279 /revision.c | |
parent | 3bc1eca91e5230739cfb488e63fae35a166a07de (diff) | |
download | git-f75e53edb38c97c8b21b69d4fc00d5419199ae4b.tar.gz |
Convert "mark_tree_uninteresting()" to raw tree walker
Not very many users to go..
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'revision.c')
-rw-r--r-- | revision.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/revision.c b/revision.c index c51ea833f9..8e93e40bb3 100644 --- a/revision.c +++ b/revision.c @@ -53,8 +53,8 @@ static void mark_blob_uninteresting(struct blob *blob) void mark_tree_uninteresting(struct tree *tree) { + struct tree_desc desc; struct object *obj = &tree->object; - struct tree_entry_list *entry; if (obj->flags & UNINTERESTING) return; @@ -63,16 +63,29 @@ void mark_tree_uninteresting(struct tree *tree) return; if (parse_tree(tree) < 0) die("bad tree %s", sha1_to_hex(obj->sha1)); - entry = create_tree_entry_list(tree); - while (entry) { - struct tree_entry_list *next = entry->next; - if (entry->directory) - mark_tree_uninteresting(lookup_tree(entry->sha1)); + + desc.buf = tree->buffer; + desc.size = tree->size; + while (desc.size) { + unsigned mode; + const char *name; + const unsigned char *sha1; + + sha1 = tree_entry_extract(&desc, &name, &mode); + update_tree_entry(&desc); + + if (S_ISDIR(mode)) + mark_tree_uninteresting(lookup_tree(sha1)); else - mark_blob_uninteresting(lookup_blob(entry->sha1)); - free(entry); - entry = next; + mark_blob_uninteresting(lookup_blob(sha1)); } + + /* + * We don't care about the tree any more + * after it has been marked uninteresting. + */ + free(tree->buffer); + tree->buffer = NULL; } void mark_parents_uninteresting(struct commit *commit) |