On Sat, Jul 31, 2010 at 1:33 PM, Jonathan Nieder <jrnieder@xxxxxxxxx> wrote: > Nguyen Thai Ngoc Duy wrote: > >> maybe we should move the CE_UPDATE/CE_WT_REMOVE removal code into >> apply_sparse_checkout(). > > Not a bad idea regardless. Yeah, something like this, perhaps. It's not tested. I'll repost the patch later, incorporating all your suggestions. diff --git a/unpack-trees.c b/unpack-trees.c index f2d148c..48654b3 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -153,6 +153,26 @@ static int apply_sparse_checkout(struct cache_entry *ce, struct unpack_trees_opt ce->ce_flags &= ~CE_SKIP_WORKTREE; /* + * Merge strategies may set CE_UPDATE|CE_REMOVE outside checkout + * area as a result of ce_skip_worktree() shortcuts in + * verify_absent() and verify_uptodate(). + * Make sure they don't modify worktree if they are already + * outside checkout area + */ + if (was_skip_worktree && ce_skip_worktree(ce)) { + ce->ce_flags &= ~CE_UPDATE; + + /* + * By default, when CE_REMOVE is on, CE_WT_REMOVE is also + * on to get that file removed from both index and worktree. + * If that file is already outside worktree area, don't + * bother remove it. + */ + if (ce->ce_flags & CE_REMOVE) + ce->ce_flags &= ~CE_WT_REMOVE; + } + + /* * We only care about files getting into the checkout area * If merge strategies want to remove some, go ahead, this * flag will be removed eventually in unpack_trees() if it's @@ -793,19 +813,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options ret = -1; goto done; } - /* - * Merge strategies may set CE_UPDATE|CE_REMOVE outside checkout - * area as a result of ce_skip_worktree() shortcuts in - * verify_absent() and verify_uptodate(). - * Make sure they don't modify worktree. - */ - if (ce_skip_worktree(ce)) { - ce->ce_flags &= ~CE_UPDATE; - - if (ce->ce_flags & CE_REMOVE) - ce->ce_flags &= ~CE_WT_REMOVE; - } - else + if (!ce_skip_worktree(ce)) empty_worktree = 0; } -- Duy -- 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