On 4/4/2022 3:49 AM, Shaoxuan Yuan wrote: > On Mon, Apr 4, 2022 at 3:25 PM Shaoxuan Yuan <shaoxuan.yuan02@xxxxxxxxx> wrote: >> I read and think about this part a few times, but I'm still confused. >> >> As Victoria pointed out earlier, and I quote, "Sparse directories *only* appear >> when you're using a sparse index, so, theoretically, this shouldn't ever >> come up (and thus isn't testable) until you're using a sparse index." >> So I'm not so sure what do you mean by putting "full index" and "sparse >> directory" together. >> >> Thus, I go ahead and try to detect a directory that is outside of >> sparse-checkout cone, without sparse-index enabled. >> >> I found a problem that if you use cache_name_pos() to do this >> detection, I imagined the following example (I'm trying to imitate an >> output of "git ls-files -t"): >> >> H a >> H b >> S d/file1 >> H e/file1 >> >> So in this index, I use cache_name_pos() to find a directory "c/". I imagine the >> the value returned would be -3, which indicates this directory would be inserted >> at index position 2. However, the cache entry at position 2 is >> "d/file1", which is >> marked with SKIP_WORKTREE, and this fact cannot guarantee that "c/" is >> a sparse directory, since ''c/" is not in the index per se. I was thinking more about the case where you find a tracked directory that has all contained files marked with SKIP_WORTKREE. If you search for "d/" you will also get -3. Then, you will see that at position 2 the cache entry d/file1 has SKIP_WORKTREE. The directory "d/" should exist on disk if there are any entries starting with "d/" that do not have the SKIP_WORKTREE bit. Interesting things happen if you are in the scenario where d/f is in the cone-mode sparse-checkout definition and you see this list of cache entries: S d/a H d/f/b S d/g Again, d/f/b should imply the existence of the directory d/ in the worktree. >> Probably I'm missing something, or I'm just dumb. > > Though I think doing a strncmp() after the cache_name_pos() > can get the job done :) I think this is the way to do it, including index_range_of_same_dir() in builtin/mv.c. Thanks, -Stolee