Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes: > No. The thing is, "git diff" is relative too - for path > specifications. And the negative entries are pathspecs - and they act > as relative ones. > > IOW, that whole > > cd drivers > git diff A..B -- net/ > > will actually show the diff for drivers/net - so the pathspec very > much acts as relative to the cwd. But that is not what I was talking about. Let's simplify. I'd say for any command that acts on "everything" when pathspec is not given, the two sets of actual paths affected by these two: git cmd -- "net/" git cmd -- ":!net/" should have no overlap (obviously) and when you take union of the two sets, that should equal to git cmd -- i.e. no pathspecs. >> 2. I am not sure what ctype.c change is about. Care to elaborate? > > I didn't see the need for it either until I made the rest of the > patch, and it didn't work at all. > > The pathspec.c code uses "if (is_pathspec_magic(..))" to test whether > a character is a short magiic pathspec character. But '^' wasn't in > that set, because it was already marked as being (only) in the regex > set. > > Does that whole is_pathspec_magic() thing make any sense when we have > an array that specifies the special characters we react to? No it does > not. > > But it is what the code does, and I just made that code work. Ah, OK.