On Fri, Apr 29, 2011 at 7:10 PM, Nguyen Thai Ngoc Duy <pclouds@xxxxxxxxx> wrote: > On Wed, Apr 27, 2011 at 11:35 PM, Â<skillzero@xxxxxxxxx> wrote: >> It seems like ! patterns in the sparse-checkout file don't exclude >> individual files in a directory. Here's what I did: >> >> ... >> >> The "test1" directory was included, but "test1/file2.txt" wasn't >> excluded even though I added a ! pattern for it. The test2 directory >> was correctly excluded so that makes me think sparse was working in >> general, but just not respecting the ! pattern in this case. >> >> Is this a bug or am I doing something wrong? > > I can reproduce it too. It looks like a regression from > whole-directory matching. If a directory is matched, all files inside > are considered "in". Let's see if I can come up with something this > weekend. sparse checkout rules are not the only ones falling for this trap. .gitignore has the same problem: pclouds@do /tmp/z $ cat .gitignore t !t/1 pclouds@do /tmp/z $ ls t 1 2 3 pclouds@do /tmp/z $ git init Initialized empty Git repository in /tmp/z/.git/ pclouds@do /tmp/z $ ~/w/git/git add . pclouds@do /tmp/z $ git ls-files .gitignore I wonder if we can convert struct exclude to struct pathspec and solve the problem all at the same place. Granted .gitignore's '*' is different from pathspec's '*' (ie. FNM_PATHNAME vs no flag to fnmatch), but struct pathspec can be taught to do it both ways and the pathspec magic can expose FNM_PATHNAME to users too. -- 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