From: Junio C Hamano <gitster@pobox.com>
To: David Aguilar <davvid@gmail.com>
Cc: Jeff King <peff@peff.net>,
git@vger.kernel.org, Nanako Shiraishi <nanako3@lavabit.com>
Subject: Re: [PATCH] grep --no-index: allow use of "git grep" outside a git repository
Date: Fri, 15 Jan 2010 23:21:57 -0800 [thread overview]
Message-ID: <7v1vhqfrai.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <20100116065135.GA15104@gmail.com> (David Aguilar's message of "Fri\, 15 Jan 2010 22\:51\:36 -0800")
David Aguilar <davvid@gmail.com> writes:
> On Fri, Jan 15, 2010 at 08:15:49PM -0800, Junio C Hamano wrote:
>
>> Realistically, this most often is used when grepping in the log, e.g.
>>
>> git log --all-match --author=peff --grep=test
>>
>> I actually wish "log" to somehow default to --all-match mode at least when
>> using the --author option. "Change by Jeff, or about test by anybody" is
>> rarely what I would want to look for.
>
> Kinda like this?
Not quite. What I really want is
git log --author=davvid --grep=difftool --grep=mergetool
to find all commits by you that is about (either diff or mergetool). I
think your patch will limit the search only to your patch that talks about
both of these two tools (not necessarily on the same line, but in the same
commit).
The extended "grep" expression parser by default creates a list of OR'ed
terms. What --all-match does is to make this top-level chain to mean "all
of these must trigger somewhere in the whole _document_ (not an individual
line), for the document to be considered a hit" for the purpose of "grep -l",
and when used with "log" family, --author/--committer/--grep are used to
limit the output to commits "grep -l" would say "yes, this document has
matched".
Currently,
git log --author=davvid --grep=difftool --grep=mergetool
will parse to a list of three terms:
GREP_PATTERN_HEAD("^author .*davvid")
GREP_PATTERN_BODY("difftool")
GREP_PATTERN_BODY("mergetool")
And giving --all-match will require all of these OR'ed terms to appear in
the commit object.
My dream one will probably has to make a list of two terms as its parse
tree instead, like this:
GREP_PATTERN_HEAD("^author .*davvid")
GREP_NODE_OR(
GREP_PATTERN_BODY("difftool")
GREP_PATTERN_BODY("mergetool")
)
and then run it with --all-match semantics. The top-level consists of two
terms, and they both must hit, but the second term is an OR'ed one.
It is unclear how we would want to throw the committer in the mix. If we
make this parse tree:
GREP_PATTERN_HEAD("^author .*davvid")
GREP_PATTERN_HEAD("^committer .*gitster")
GREP_NODE_OR(
GREP_PATTERN_BODY("difftool")
GREP_PATTERN_BODY("mergetool")
)
we would be looking for your patch about either diff or mergetool _and_
it has to be committed by me. On the other hand, if we do this:
GREP_NODE_OR(
GREP_PATTERN_HEAD("^author .*davvid")
GREP_PATTERN_HEAD("^committer .*gitster")
)
GREP_NODE_OR(
GREP_PATTERN_BODY("difftool")
GREP_PATTERN_BODY("mergetool")
)
we would be looking for a patch about (either diff or mergetool) _and_
(either committed by me or written by you).
I think the former makes more sense in _our_ project (because there are
very few committers), but in the context of other projects, e.g. the Linux
kernel, you may want to give "Linus" to both --author and --committer to
track what he did (either as an author to some other subsystem, or as the
top-level integrator for the entire system), and for such a use case, the
latter would make more sense.
Unfortunately, the parsing of --grep/--author/--committer options to the
log family is quite limited (you cannot give --and, --or and --not, for
example), and it would be hard to express these distinction.
next prev parent reply other threads:[~2010-01-16 7:23 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-13 16:13 Filenames and prefixes in extended diffs Andreas Gruenbacher
2010-01-13 19:49 ` Junio C Hamano
2010-01-14 0:16 ` Junio C Hamano
2010-01-15 13:32 ` Nanako Shiraishi
2010-01-15 18:09 ` Junio C Hamano
2010-01-15 20:50 ` [PATCH] grep: prepare to run outside of a work tree Junio C Hamano
2010-01-15 20:52 ` [PATCH] grep --no-index: allow use of "git grep" outside a git repository Junio C Hamano
2010-01-15 21:08 ` Jeff King
2010-01-16 1:05 ` Junio C Hamano
2010-01-16 1:15 ` Jeff King
2010-01-16 4:15 ` Junio C Hamano
2010-01-16 6:51 ` David Aguilar
2010-01-16 7:21 ` Junio C Hamano [this message]
2010-01-18 1:51 ` Jeff King
2010-01-18 3:35 ` Junio C Hamano
2010-01-18 4:02 ` Junio C Hamano
2010-01-18 5:57 ` Jeff King
2010-01-18 6:30 ` Junio C Hamano
2010-01-18 6:50 ` Jeff King
2010-01-18 23:22 ` Filenames and prefixes in extended diffs Andreas Gruenbacher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7v1vhqfrai.fsf@alter.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=davvid@gmail.com \
--cc=git@vger.kernel.org \
--cc=nanako3@lavabit.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).