Jehan Pagès [off-list ref] writes:
quoted
I think --author=someone greps the "author " field in the commit
object looking for the hit with "someone", and your request asks to
show commits that either do not have "something" or was not written
by "someone", I would guess.
Note that I can still see commits with "something", and I can also see
commits by "someone" in my results. So my request actually ask for
commits which have neither "something" nor are done by "someone".
Anyway I don't think that's the expected result, hence is still a bug.
Am I wrong?
Unlike "git grep", "git log" works with boolean expression that does
not explicitly have a way to say "--and" and "--or", so only one
interpretation has been chosen long time ago. All the terms are
ORed together, and then the whole thing can be inverted with
"--invert-grep". i.e. you are telling an equivalent of
$ git grep --not \( -e "author someone" --or -e "something" \)
with the command line, and there is no way to combine the requested
match criteria (there are two, "author must be somebody" and
"something must be in the message") differently.
Given that, that is the "right" expectation, and as long as you get
the behaviour, there is no "bug".
You can call it a lack of feature, though, and patches to implement
a more flexible combination of match criteria like "git grep" allows
is always welcome.
Hi,
On Wed, Jul 13, 2016 at 7:37 PM, Junio C Hamano [off-list ref] wrote:
Jehan Pagès [off-list ref] writes:
quoted
quoted
I think --author=someone greps the "author " field in the commit
object looking for the hit with "someone", and your request asks to
show commits that either do not have "something" or was not written
by "someone", I would guess.
Note that I can still see commits with "something", and I can also see
commits by "someone" in my results. So my request actually ask for
commits which have neither "something" nor are done by "someone".
Anyway I don't think that's the expected result, hence is still a bug.
Am I wrong?
Unlike "git grep", "git log" works with boolean expression that does
not explicitly have a way to say "--and" and "--or", so only one
interpretation has been chosen long time ago. All the terms are
ORed together, and then the whole thing can be inverted with
"--invert-grep". i.e. you are telling an equivalent of
$ git grep --not \( -e "author someone" --or -e "something" \)
with the command line, and there is no way to combine the requested
match criteria (there are two, "author must be somebody" and
"something must be in the message") differently.
Given that, that is the "right" expectation, and as long as you get
the behaviour, there is no "bug".
I see. Well it's a little counter-intuitive though, since the option
is called --invert-grep. And the man indicates:
« Limit the commits output to ones with log message that do not match
the pattern specified with --grep=<pattern>. »
So it gives the impression that the option is made only to invert the
--grep part. Whereas in fact, you are saying it inverts any other
optional selection (or at least also --author). A better naming should
have been called --invert-matches, or even just --invert.
And the man description should definitely be completed, IMO.
You can call it a lack of feature, though, and patches to implement
a more flexible combination of match criteria like "git grep" allows
is always welcome.
Maybe I will! This would be useful to have a little more capabilities
for commit selection.
Thanks.
Jehan
--
ZeMarmot open animation film
http://film.zemarmot.net
Patreon: https://patreon.com/zemarmot
Tipeee: https://www.tipeee.com/zemarmot