cache-tree: protect against "git prune".
authorJunio C Hamano <junkio@cox.net>
Mon, 24 Apr 2006 22:12:42 +0000 (15:12 -0700)
committerJunio C Hamano <junkio@cox.net>
Mon, 24 Apr 2006 22:12:42 +0000 (15:12 -0700)
We reused the cache-tree data without verifying the tree object
still exists.  Recompute in cache_tree_update() an otherwise
valid cache-tree entry when the tree object disappeared.

This is not usually a problem, but theoretically without this
fix things can break when the user does something like this:

- read-index from a side branch
- write-tree the result
- remove the side branch with "git branch -D"
- remove the unreachable objects with "git prune"
- write-tree what is in the index.

Signed-off-by: Junio C Hamano <junkio@cox.net>
cache-tree.c

index f6d1dd1..b34b0bc 100644 (file)
@@ -177,7 +177,7 @@ static int update_one(struct cache_tree *it,
        char *buffer;
        int i;
 
-       if (0 <= it->entry_count)
+       if (0 <= it->entry_count && has_sha1_file(it->sha1))
                return it->entry_count;
 
        /*