Re: [PATCH 7/8] setup_tree_pathspec(): interpret '^' as negative pathspec
From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:49:32
2010/9/12 Elijah Newren [off-list ref]:
2010/9/8 Nguyễn Thái Ngọc Duy [off-list ref]:quoted
This patch does preparation work for tree exclusion in tree_entry_interesting(). '^' has similar meaning to '!' in gitexcludes. '!' is not used because bash does not like arguments with a leading '!'. Eventually, "git diff -- foo ^foo/bar" should show differences in foo, except foo/bar. If "git diff -- ^foo" is given, then it implies everything except foo, which could surprise users that "bar" in "git diff -- bar ^foo" has no effect at all.I really like the work here. There are just two things that I think are missing: * It doesn't handle files with leading carats in their name * It handles some nested include/exclude cases (e.g. dir ^dir/subdir) but not more complicated ones.
Yeah. I originally needed it to compare trees outside narrow area (i.e. negating all pathspecs). But I would need a more robust implementation soon when I implement tree widening.
Note: In the second test, I used: * "^funny" to search for all files EXCEPT "funny" * "^^funny" to search for a file named "^funny" * "^^^funny" to search for all files EXCEPT "^funny" I'm not sure if that's really the syntax we want to adopt, but it should be easy to change if we decide on some other syntax.
Another way is always treat the leading ^ as negative pathspec. If you have file "^foo", specify it with ./^foo. There's still problem with top level entries this way. -- Duy