From: Phil Hord <hordp@cisco.com>
To: Jakub Narebski <jnareb@gmail.com>
Cc: git@vger.kernel.org,
"John 'Warthog9' Hawley" <warthog9@kernel.org>,
admin@repo.or.cz
Subject: Re: [PATCH 0/5] gitweb: Improve search code
Date: Wed, 22 Jun 2011 13:10:39 -0400 [thread overview]
Message-ID: <4E02220F.10800@cisco.com> (raw)
In-Reply-To: <1308756535-29701-1-git-send-email-jnareb@gmail.com>
Admin note: Should I have changed the subject or kept it?
On 06/22/2011 11:28 AM, Jakub Narebski wrote:
> P.S. Another addition that I sometimes wanted git to have would be
> 'filename' or 'find' search: searching for file by name.
>
> What do you think of it?
I like it. +1 from me.
I normally revert to 'git log --name-status | less <CR> /filename.foo',
which is awful, of course. I've always assumed there's a better way I
haven't discovered yet. But if there is, well... I haven't discovered
it yet.
This syntax works on some files, but is limited and/or broken:
# Finds all commits touching the file named './foo.bar', iff
./foo.bar exists in the current commit.
git log -- foo.bar
I say 'broken', but maybe it's not; it feels like it is when I do this:
# Returns zero logs
git log -- some-deleted-file.txt
# Returns at least two logs
git log --all -- some-deleted-file.txt
I think I understand why that happens (search optimization), but it is
unexpected from the user's perspective. I also suspect it will miss the
'pre-resurrection' commits for files which were deleted and resurrected
in the past.
What do you think of these as new 'Commit limiters' for git log:
--name=<pattern>, --name-glob=<glob>
Limit the commits output to ones touching files that match the
specified pattern (regular expression) or glob (shell glob
pattern).
This could be further modified by --diff-filter, --all-match, etc.
# Find all commits which deleted a file named **/foo.**
git log --name="/foo[.]" --diff-filter=D
# Find all commits which deleted a file named **/foo.**
# or one named **/bar.**
git log --name="/foo[.]" --name="/bar[.]" --diff-filter=D
# Find all commits which touched both a file named **/foo.**
# and one named **/bar.**
git log --name="/foo[.]" --name="/bar[.]" --all-match
Or this alternate form:
--name-pattern, --name-glob
Treat all <path> selectors as pattern (regular expression) or
glob (shell glob pattern).
I think I prefer the former, since the latter does not allow for a
combination of raw names, pattern names and glob names. Also, it does
not (intuitively) support --all-match.
# Find all commits which deleted a file named **/foo.**
git log --name-pattern --diff-filter=D -- "/foo[.]"
git log --name-glob --diff-filter=D -- "/foo.*"
# Find all commits which deleted a file named **/foo.**
# or one named **/bar.**
git log --name-pattern --diff-filter=D -- "/foo[.]" "/bar[.]"
# Find all commits which touched both a file named **/foo.**
# and one named **/bar.**
# -- Can't be done?
Finally, do the extensions belong on rev-list as well? The 'git
rev-list' command seems underpowered compared to 'git log'.
Phil
next prev parent reply other threads:[~2011-06-22 17:11 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-22 15:28 [PATCH 0/5] gitweb: Improve search code Jakub Narebski
2011-06-22 15:28 ` [PATCHv3 1/5] gitweb: 'pickaxe' and 'grep' features requires 'search' to be enabled Jakub Narebski
2011-06-22 15:28 ` [PATCH 2/5] gitweb: Check permissions first in git_search Jakub Narebski
2011-06-22 15:28 ` [PATCH 3/5] gitweb: Split body of git_search into subroutines Jakub Narebski
2011-06-22 15:28 ` [PATCH 4/5] gitweb: Clean up code in git_search_* subroutines Jakub Narebski
2011-06-22 15:28 ` [PATCH 5/5] gitweb: Make git_search_* subroutines render whole pages Jakub Narebski
2011-06-22 17:10 ` Phil Hord [this message]
2011-06-22 18:00 ` [PATCH 0/5] gitweb: Improve search code Jakub Narebski
2011-06-22 19:24 ` Phil Hord
2011-06-22 18:55 ` Junio C Hamano
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=4E02220F.10800@cisco.com \
--to=hordp@cisco.com \
--cc=admin@repo.or.cz \
--cc=git@vger.kernel.org \
--cc=jnareb@gmail.com \
--cc=warthog9@kernel.org \
/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).