On 1/30/2020 2:29 AM, Jeff King wrote: > On Wed, Jan 29, 2020 at 09:16:11AM -0500, Derrick Stolee wrote: > >> I've applied the smaller comments and am now investigating the right >> thing to do with other is_glob_special() characters. There is a small >> chance that I can replace any "c == '*' || c == '\'" with is_glob_special(), >> but we shall see. At the very least, I'll need to expand my tests. > > Yeah, that's all I'd expect to need. You mentioned earlier about how > ls-tree would output them, but I don't think it would matter. Now that > you're using unquote_c_style(), you'll get the literal filenames no > matter which way ls-tree decides to quote them (and I don't think it > would quote '?', just as it wouldn't '*', because those are not > syntactically significant in its output). Yes, even this case for 'git ls-tree' gets covered in the final version of the test: test_expect_success BSLASHPSPEC 'pattern-checks: escaped characters' ' git clone repo escaped && TREEOID=$(git -C escaped rev-parse HEAD:folder1) && NEWTREE=$(git -C escaped mktree <<-EOF $(git -C escaped ls-tree HEAD) 040000 tree $TREEOID zbad\\dir 040000 tree $TREEOID zdoes*exist 040000 tree $TREEOID zglob[!a]? EOF ) && COMMIT=$(git -C escaped commit-tree $NEWTREE -p HEAD) && git -C escaped reset --hard $COMMIT && check_files escaped "a deep folder1 folder2 zbad\\dir zdoes*exist" zglob[!a]? && git -C escaped sparse-checkout init --cone && git -C escaped sparse-checkout set zbad\\dir/bogus "zdoes*not*exist" "zdoes*exist" "zglob[!a]?" && cat >expect <<-\EOF && /* !/*/ /zbad\\dir/ !/zbad\\dir/*/ /zbad\\dir/bogus/ /zdoes\*exist/ /zdoes\*not\*exist/ /zglob\[!a]\?/ EOF test_cmp expect escaped/.git/info/sparse-checkout && check_read_tree_errors escaped "a zbad\\dir zdoes*exist zglob[!a]?" && git -C escaped ls-tree -d --name-only HEAD >list-expect && git -C escaped sparse-checkout set --stdin <list-expect && cat >expect <<-\EOF && /* !/*/ /deep/ /folder1/ /folder2/ /zbad\\dir/ /zdoes\*exist/ /zglob\[!a]\?/ EOF test_cmp expect escaped/.git/info/sparse-checkout && check_files escaped "a deep folder1 folder2 zbad\\dir zdoes*exist" zglob[!a]? && git -C escaped sparse-checkout list >list-actual && test_cmp list-expect list-actual ' Thanks, -Stolee