Thread (13 messages) flat view 13 messages, 2 authors, 2016-06-15

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help