Petr Baudis <pasky@xxxxxxx> writes: > On Thu, Sep 04, 2008 at 01:31:19AM -0700, Junio C Hamano wrote: >> To handle --author=<match> request, the code created a grep instruction >> that tried to match a line that begins with 'author ' and <match> >> somewhere on the same line. "begins with 'author '" obviously needs to be >> expressed with an regexp '^author '. >> >> When the user specifies --fixed-string, this does not work at all. >> >> This extends the grep machinery so that a match insn can ignore user >> specified --fixed-string request, and uses the '( -e A --and -e B )' >> construct from the grep machinery in order to express "has to begin with >> '^author ', and also the same line must match the given pattern". >> >> Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> > > Wow, this is clever solution! FWIW, Actually, it is not clever at all. It is a more natural solution, than what we originally had, at least from the view of somebody who wrote our grep superstructure. We use stock regexp(3) library for finding individual matches, but the layer on top of that to implement the default behaviour to --or hits together from multiple expressions, optionally --and hits to find a line that has both expressions, parenthesize to form groups of expressions etc. are all our inventions. One related thing I suspect many people haven't realized is that "git log" can use "--all-match". These two do different things: $ git log --author=Linus --grep=revision $ git log --all-match --author=Linus --grep=revision The former finds commits that talk about "revision" by anybody, or commits by Linus where he may or may not talk about "revision". The latter finds only commits by Linus where he talks about a word "revision" in the log message. I've been wondering if we want to make --all-match the default for revision traversal family (i.e. "git log"), as I suspect it would match people's expectations more naturally, even though it is a backward incompatible change. It is backward incompatible only because the original implementation was stupid ;-). -- 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