Hi Junio, On Fri, Nov 22, 2019 at 11:34:17AM +0900, Junio C Hamano wrote: > Denton Liu <liu.denton@xxxxxxxxx> writes: > > > The reason I ask is because (correct me if I'm wrong) a lot of other git > > commands (like add, reset and checkout) don't seem to accept pathspecs > > via stdin and could suffer the same problem. xargs seems like a more > > general way of solving the problem of long command lines. > > You contributors who are potentially throwing your own topics into > the cauldron, please be paying a bit more attention to other topics > already cooking in the pot. I think am/pathspec-from-file wants to > go in the general direction. Interesting, I never caught this topic when it went over the list. I guess I should read your What's Cooking emails more thoroughly instead of just scanning for my own contributions. > > There are things "xargs" is sufficient, and there are things that > absolutely requires a single invocation of "git". "grep" is a bit > of both. > > $ git grep -e "$pattern" -- A B C > > (where A, B and C are hundreds) can be split into three independent > invocations of "git grep" via "xargs", essentially running > > $ git grep -e "$pattern" -- A > $ git grep -e "$pattern" -- B > $ git grep -e "$pattern" -- C > > independently. In the above, I was talking about the new --pathspecs-file option in particular. So it looks like you agree with me that the new option doesn't supercede xargs? > > But > > $ git grep -e P1 -e P2 -e P3 -- A > > (where each of "-e Pn" in reality may be "-e Pn1 -e Pn2 -e Pn3..." > that has hundreds of patterns) cannot be split into separate > invocations and keep the same meaning. > > $ git grep -e P1 -- A > $ git grep -e P2 -- A > $ git grep -e P3 -- A > > may show the same lines, but (1) lines with both P1 and P2 would be > shown duplicated, and (2) the order of the output would be different > from a single invocation looking for all patterns at once. We already have `-f` to handle this particular case, no? > > Needless to say, the ability to combine patterns with --all-match, > --and, etc., and negate them would mean the list of patterns must be > split (even when it makes sense to do so) at the right places. > > $ git grep -e P1 --and -e P2 > > cannot be split into two or more invocations, for example. Anyway, thanks for going into detail about this. It makes things a lot more clear. -Denton