Derrick Stolee wrote: > On 2/23/2022 1:25 PM, Victoria Dye via GitGitGadget wrote: >> From: Victoria Dye <vdye@xxxxxxxxxx> > > Aside: It looks like you have the same "mailto:" email addresses in the > CC similar to a mistake I made. The root cause of my issue was that I > copy-pasted from the rendered description of another PR instead of > copying the plaintext available by clicking the "Edit" button. Perhaps > this is worth extending GGG to prevent this issue in the future. > >> Prevent the repository root from being collapsed into a sparse directory by >> treating an empty path as "inside the sparse-checkout". When collapsing a >> sparse index (e.g. in 'git sparse-checkout reapply'), the root directory >> typically could not become a sparse directory due to the presence of in-cone >> root-level files and directories. However, if no such in-cone files or >> directories were present, there was no explicit check signaling that the >> "repository root path" (an empty string, in the case of >> 'convert_to_sparse(...)') was in-cone, and a sparse directory index entry >> would be created from the repository root directory. >> >> The documentation in Documentation/git-sparse-checkout.txt explicitly states >> that the files in the root directory are expected to be in-cone for a >> cone-mode sparse-checkout. Collapsing the root into a sparse directory entry >> violates that assumption, as sparse directory entries are expected to be >> outside the sparse cone and have SKIP_WORKTREE enabled. This invalid state >> in turn causes issues with commands that interact with the index, e.g. >> 'git status'. >> >> Treating an empty (root) path as in-cone prevents the creation of a root >> sparse directory in 'convert_to_sparse(...)'. Because the repository root is >> otherwise never compared with sparse patterns (in both cone-mode and >> non-cone sparse-checkouts), the new check does not cause additional changes >> to how sparse patterns are applied. > > Good catch! I agree with everything said here. > >> + if (!strlen(path) || > > Instead of a full strlen(), could we just check "if (!*path ||" to > look for the nul byte? > > Thanks, > -Stolee I'll reroll with corrected CC's & make the `strlen` -> `*path` change. Thanks!