From: Nguyen Thai Ngoc Duy Date: Sat, 31 Jul 2010 03:13:32 GMT Subject: Re: [PATCH 3/3] Mark new entries skip-worktree appropriately Message-ID: In-Reply-To: <20100731023219.GB906@burratino> 2010/7/31 Jonathan Nieder : > Nguyễn Thái Ngọc Duy wrote: > >> Sparse checkout updates worktree based on the old and new >> skip-worktree status when $GIT_DIR/info/sparse-checkout changes: >> >> old = ce_skip_worktree(ce);           // current skip-worktree >> new = will_have_skip_work_tree(ce);   // from $GIT..sparse-checkout >> if (old && !new) add_file_back(ce);   // shrink checkout area >> if (!old && new) remove_file_out(ce); [1] // enlarge checkout area >> >> New entries after merging will always have skip-worktree unset >> (i.e. old = 0). If those files are filtered out by >> $GIT_DIR/info/sparse-checkout (i.e. new != 0), then case [1] will >> happen. But there is nothing to remove because they're new. > > When using unpack_trees to add a new file, there is no in-file > index entry to grab the previous skip worktree bit from.  If it > is outside the checkout area, we should pretend it was skipped before, > too; otherwise a checkout can cause a file on disk whose name > coincides with a newly added outside-worktree file to be deleted. > > Do I understand correctly? Yes. -- Duy