Junio C Hamano <gitster@xxxxxxxxx> writes: > John Keeping <john@xxxxxxxxxxxxx> writes: > >> On Fri, Jul 11, 2014 at 09:44:33PM -0700, David Turner wrote: >>> When git checkout checks out a branch, create or update the >>> cache-tree so that subsequent operations are faster. >>> >>> update_main_cache_tree learned a new flag, WRITE_TREE_REPAIR. When >>> WRITE_TREE_REPAIR is set, portions of the cache-tree which do not >>> correspond to existing tree objects are invalidated (and portions which >>> do are marked as valid). No new tree objects are created. >>> >>> Signed-off-by: David Turner <dturner@xxxxxxxxxxx> >>> --- >> >> This causes an incorrect error message to be printed when switching >> branches with staged changes in a subdirectory. The test case is pretty >> simple: >> >> git init test && >> cd test && >> mkdir sub && >> echo one >sub/one && >> git add sub/one && >> git commit -m one && >> echo two >sub/two && >> git add sub/two && >> git checkout -b test >> >> After this commit the output is: >> >> error: invalid object 040000 0000000000000000000000000000000000000000 for 'bar' >> A bar/quux >> Switched to branch 'test' >> >> but the "error:" line should not be there. > > Yeah, this seems to be broken and I am unhappy that I didn't notice > it myself as I always use a version that is somewhat ahead of 'next' > myself. Perhaps like this, to make sure that we do not throw a garbage object name into the cache tree when we avoid creating an unwanted tree object? All the tests added by the series seems to pass, so I am assuming that this will not break the "repair" codepath when it should kick in. We may want to add your test to t0090 as well. cache-tree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cache-tree.c b/cache-tree.c index f951d7d..e3baf42 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -398,7 +398,7 @@ static int update_one(struct cache_tree *it, it->entry_count, it->subtree_nr, sha1_to_hex(it->sha1)); #endif - return i; + return to_invalidate ? -1 : i; } int cache_tree_update(struct cache_tree *it, -- 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