From a84faf777075e54f9faf22dbc6345fd756cd0c8d Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 3 May 2006 15:32:54 -0700 Subject: [PATCH 1/3] Fix test-dump-cache-tree in one-tree disappeared case. When reconstructing an invalidated subtree for reference purposes by test-dump-cache-tree, we did not handle the case where we shouldn't have a cached and invalidated subtree in the result, leading to an unneeded die(). Signed-off-by: Junio C Hamano --- dump-cache-tree.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dump-cache-tree.c b/dump-cache-tree.c index fbea263dd9..1ccaf51773 100644 --- a/dump-cache-tree.c +++ b/dump-cache-tree.c @@ -21,10 +21,9 @@ static int dump_cache_tree(struct cache_tree *it, int i; int errs = 0; - if (!it) - return; - if (!ref) - die("internal error"); + if (!it || !ref) + /* missing in either */ + return 0; if (it->entry_count < 0) { dump_one(it, pfx, ""); From c2b9ae43303342a33b2632939f319a3554f3a70c Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 3 May 2006 16:07:02 -0700 Subject: [PATCH 2/3] read-tree: invalidate cache-tree entry when a new index entry is added. When doing two-way merge, we failed to invalidate the directory that a new entry is added (we correctly did so for modified and deleted entries). Signed-off-by: Junio C Hamano --- read-tree.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/read-tree.c b/read-tree.c index 66c0120f13..067fb95e9d 100644 --- a/read-tree.c +++ b/read-tree.c @@ -446,6 +446,8 @@ static int merged_entry(struct cache_entry *merge, struct cache_entry *old) invalidate_ce_path(old); } } + else + invalidate_ce_path(merge); merge->ce_flags &= ~htons(CE_STAGEMASK); add_cache_entry(merge, ADD_CACHE_OK_TO_ADD); return 1; From 00703e6d6822f81e7b22d079b7e6d9d044f46cf0 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 3 May 2006 16:10:45 -0700 Subject: [PATCH 3/3] cache-tree: a bit more debugging support. Signed-off-by: Junio C Hamano --- cache-tree.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cache-tree.c b/cache-tree.c index e452238ba7..a880c97b38 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -110,6 +110,10 @@ void cache_tree_invalidate_path(struct cache_tree *it, const char *path) int namelen; struct cache_tree_sub *down; +#if DEBUG + fprintf(stderr, "cache-tree invalidate <%s>\n", path); +#endif + if (!it) return; slash = strchr(path, '/'); @@ -335,7 +339,7 @@ static int update_one(struct cache_tree *it, offset += 20; #if DEBUG - fprintf(stderr, "cache-tree %o %.*s\n", + fprintf(stderr, "cache-tree update-one %o %.*s\n", mode, entlen, path + baselen); #endif } @@ -351,7 +355,7 @@ static int update_one(struct cache_tree *it, free(buffer); it->entry_count = i; #if DEBUG - fprintf(stderr, "cache-tree (%d ent, %d subtree) %s\n", + fprintf(stderr, "cache-tree update-one (%d ent, %d subtree) %s\n", it->entry_count, it->subtree_nr, sha1_to_hex(it->sha1)); #endif