diff options
author | Junio C Hamano <junkio@cox.net> | 2006-05-28 22:47:53 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-05-28 22:47:53 -0700 |
commit | 0a2586c807fadc4b13a741e693471765870f6bb4 (patch) | |
tree | 9c62558c76d02057e71f6152c8d73b9cb1cf536e /fsck-objects.c | |
parent | 7d55561986ffe94ca7ca22dc0a6846f698893226 (diff) | |
parent | 097dc3d8c32f4b85bf9701d5e1de98999ac25c1c (diff) | |
download | git-0a2586c807fadc4b13a741e693471765870f6bb4.tar.gz |
Merge branch 'lt/tree' into jc/lt-tree-n-cache-tree
* lt/tree: (98 commits)
Remove "tree->entries" tree-entry list from tree parser
Switch "read_tree_recursive()" over to tree-walk functionality
Make "tree_entry" have a SHA1 instead of a union of object pointers
Add raw tree buffer info to "struct tree"
Don't use "sscanf()" for tree mode scanning
git-fetch: avoid using "case ... in (arm)"
mailinfo: skip bogus UNIX From line inside body
mailinfo: More carefully parse header lines in read_one_header_line()
Allow in body headers beyond the in body header prefix.
More accurately detect header lines in read_one_header_line
In handle_body only read a line if we don't already have one.
Refactor commit messge handling.
Move B and Q decoding into check header.
Make read_one_header_line return a flag not a length.
Fix memory leak in "git rev-list --objects"
gitview: Move the console error messages to message dialog
gitview: Add key binding for F5.
Let git-clone to pass --template=dir option to git-init-db.
Make cvsexportcommit create parent directories as needed.
Document current cvsexportcommit limitations.
...
Conflicts:
Makefile, builtin.h, git.c are trivially resolved.
builtin-read-tree.c needed adjustment for the tree
parser change.
Diffstat (limited to 'fsck-objects.c')
-rw-r--r-- | fsck-objects.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/fsck-objects.c b/fsck-objects.c index 1922b6d84c..42778e87d0 100644 --- a/fsck-objects.c +++ b/fsck-objects.c @@ -11,6 +11,7 @@ #include "cache-tree.h" #define REACHABLE 0x0001 +#define SEEN 0x0002 static int show_root = 0; static int show_tags = 0; @@ -161,7 +162,7 @@ static int fsck_tree(struct tree *item) struct tree_entry_list *entry, *last; last = NULL; - for (entry = item->entries; entry; entry = entry->next) { + for (entry = create_tree_entry_list(item); entry; entry = entry->next) { if (strchr(entry->name, '/')) has_full_path = 1; has_zero_pad |= entry->zeropad; @@ -198,17 +199,15 @@ static int fsck_tree(struct tree *item) default: break; } - free(last->name); free(last); } last = entry; } - if (last) { - free(last->name); + if (last) free(last); - } - item->entries = NULL; + free(item->buffer); + item->buffer = NULL; retval = 0; if (has_full_path) { @@ -278,6 +277,9 @@ static int fsck_sha1(unsigned char *sha1) struct object *obj = parse_object(sha1); if (!obj) return error("%s: object not found", sha1_to_hex(sha1)); + if (obj->flags & SEEN) + return 0; + obj->flags |= SEEN; if (obj->type == blob_type) return 0; if (obj->type == tree_type) @@ -465,6 +467,7 @@ int main(int argc, char **argv) { int i, heads; + track_object_refs = 1; setup_git_directory(); for (i = 1; i < argc; i++) { |