Current index does not support empty trees. But users can construct empty trees directly using plumbing. When empty trees are checked out, things become inconsistent: - If cache-tree somehow is invalidated, when a tree is read to index, empty trees disappear. When we write trees back, empty trees will be gone. - If cache-tree is generated by read-tree and remains valid by the time trees are written back, empty trees remain. Let's do it in a consistent way, always disregard empty trees in index. If users choose to create empty trees their own way, they should not use index at all. Signed-off-by: Nguyán ThÃi Ngác Duy <pclouds@xxxxxxxxx> --- On Wed, Feb 2, 2011 at 2:09 AM, Ilari Liusvaara <ilari.liusvaara@xxxxxxxxxxx> wrote: > Yes, writing to index/working area. IIRC, having such entry in tree causes > a "ghost directory". I don't exactly recall what such thing broke, but I > remember that it broke something (merging?)... > > Those ghosts also had annoying tendency to persist between commits. Commits > didn't kill them. Rm didn't work. You had to create something on top/inside to > get rid of them. That's probably because of cache-tree. Empty trees can't exist in index so an operation "trees -> index -> trees" will remove empty trees. But read-tree can preserve the exact structure of original trees (including empty trees) so if that particular path is untouched, empty trees will remain. Perhaps a patch like this for pre-1.8.0? cache-tree.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/cache-tree.c b/cache-tree.c index f755590..f717793 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -621,6 +621,8 @@ static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree) struct tree *subtree = lookup_tree(entry.sha1); if (!subtree->object.parsed) parse_tree(subtree); + if (!hashcmp(entry.sha1, (unsigned char *)EMPTY_TREE_SHA1_BIN)) + continue; sub = cache_tree_sub(it, entry.path); sub->cache_tree = cache_tree(); prime_cache_tree_rec(sub->cache_tree, subtree); -- 1.7.3.4.878.g439c7 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html