Nguyán ThÃi Ngác Duy wrote: > 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. While this violates some seeming invariants, like 1. git reset --hard git commit --allow-empty git rev-parse HEAD^^{tree} >expect git rev-parse HEAD^{tree} >actual test_cmp expect actual 2. git reset --hard git revert HEAD if git rev-parse HEAD~2 then git rev-parse HEAD~2^{tree} >expect git rev-parse HEAD^{tree} >actual test_cmp expect actual fi , I think it's a good change. Malformed modes in trees already break those false invariants iiuc. Thanks. > --- a/cache-tree.c > +++ b/cache-tree.c > @@ -621,9 +621,18 @@ 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)) { > + warning("empty tree detected! Will be removed in new commits"); > + cnt = -1; > + break; > + } Aside from the warning, this part is an optimization, right? > sub = cache_tree_sub(it, entry.path); > sub->cache_tree = cache_tree(); > prime_cache_tree_rec(sub->cache_tree, subtree); > + if (sub->cache_tree->entry_count == -1) { > + cnt = -1; > + break; > + } Would be nice to include a test for this, like so: subdir/ empty1/ subsubdir/ empty2/ empty3/ > --- /dev/null > +++ b/t/t1013-read-tree-empty.sh > @@ -0,0 +1,20 @@ > +#!/bin/sh > + > +test_description='read-tree with empty trees' > + > +. ./test-lib.sh > + > +EMPTY_TREE=4b825dc642cb6eb9a060e54bf8d69288fbee4904 If we _have_ to hard-code this (why?) then I'd prefer to do so in test-lib.sh. [...] > +test_expect_success 'write-tree removes empty tree' ' > + git read-tree `cat tree` && > + git write-tree >actual > + echo $EMPTY_TREE >expected > + test_cmp expected actual Broken &&-chain. Not sure why this test relies on virtual objects and another (independently nice) patch instead of adding the empty tree to the object db --- is there something subtle I am missing? The test does not distinguish between success due to git read-tree omitting empty trees and success due to git mktree omitting empty trees. Hope that helps, Jonathan -- 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