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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.