From: Brandon Williams <bmwill@google.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Stefan Hajnoczi <stefanha@redhat.com>,
git@vger.kernel.org, Jeff King <peff@peff.net>
Subject: Re: [PATCH v2 2/2] grep: use '/' delimiter for paths
Date: Fri, 20 Jan 2017 15:51:33 -0800 [thread overview]
Message-ID: <20170120235133.GA146274@google.com> (raw)
In-Reply-To: <xmqqpojhwf2r.fsf@gitster.mtv.corp.google.com>
On 01/20, Junio C Hamano wrote:
> Stefan Hajnoczi <stefanha@redhat.com> writes:
>
> > If the tree contains a sub-directory then git-grep(1) output contains a
> > colon character instead of a path separator:
> >
> > $ git grep malloc v2.9.3:t
> > v2.9.3:t:test-lib.sh: setup_malloc_check () {
> > $ git show v2.9.3:t:test-lib.sh
> > fatal: Path 't:test-lib.sh' does not exist in 'v2.9.3'
> >
> > This patch attempts to use the correct delimiter:
> >
> > $ git grep malloc v2.9.3:t
> > v2.9.3:t/test-lib.sh: setup_malloc_check () {
> > $ git show v2.9.3:t/test-lib.sh
> > (success)
> >
> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > ---
> > builtin/grep.c | 4 +++-
> > t/t7810-grep.sh | 5 +++++
> > 2 files changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/builtin/grep.c b/builtin/grep.c
> > index 90a4f3d..7a7aab9 100644
> > --- a/builtin/grep.c
> > +++ b/builtin/grep.c
> > @@ -494,7 +494,9 @@ static int grep_object(struct grep_opt *opt, const struct pathspec *pathspec,
> >
> > /* Add a delimiter if there isn't one already */
> > if (name[len - 1] != '/' && name[len - 1] != ':') {
> > - strbuf_addch(&base, ':');
> > + /* rev: or rev:path/ */
> > + char delim = obj->type == OBJ_COMMIT ? ':' : '/';
>
> Why check the equality with commit, rather than un-equality with
> tree? Wouldn't you want to treat $commit:path and $tag:path the
> same way?
I assume Stefan just grabbed my naive suggestion hence why it checks
equality with a commit. So that's my fault :) Either of these may
not be enough though, since if you do 'git grep malloc v2.9.3^{tree}'
with this change the output prefix is 'v2.9.3^{tree}/' instead of the
correct prefix 'v2.9.3^{tree}:'
>
> I also think the two patches should be squashed together, as it is
> only after this patch that the code does the "right thing" by
> changing the delimiter depending on obj->type.
>
> > + strbuf_addch(&base, delim);
> > }
> > }
> > init_tree_desc(&tree, data, size);
> > diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh
> > index e804a3f..8a58d5e 100755
> > --- a/t/t7810-grep.sh
> > +++ b/t/t7810-grep.sh
> > @@ -1445,6 +1445,11 @@ test_expect_success 'grep outputs valid <rev>:<path> for HEAD:t/' '
> > test_cmp expected actual
> > '
> >
> > +test_expect_success 'grep outputs valid <rev>:<path> for HEAD:t' '
> > + git grep vvv HEAD:t >actual &&
> > + test_cmp expected actual
> > +'
> > +
>
> Perhaps you want an annotated tag object refs/tags/v1.0 that points
> at the commit at the HEAD, and then run the same grep on v1.0:t, in
> addition to the above test.
>
> > cat >expected <<EOF
> > HEAD:t/a/v:vvv
> > HEAD:t/v:vvv
--
Brandon Williams
next prev parent reply other threads:[~2017-01-20 23:52 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-20 17:11 [PATCH v2 0/2] grep: make output consistent with revision syntax Stefan Hajnoczi
2017-01-20 17:11 ` [PATCH v2 1/2] grep: only add delimiter if there isn't one already Stefan Hajnoczi
2017-01-20 22:19 ` Junio C Hamano
2017-01-20 17:11 ` [PATCH v2 2/2] grep: use '/' delimiter for paths Stefan Hajnoczi
2017-01-20 22:18 ` Junio C Hamano
2017-01-20 23:51 ` Brandon Williams [this message]
2017-02-07 15:04 ` Stefan Hajnoczi
2017-02-07 19:50 ` Jeff King
2017-02-07 20:24 ` Junio C Hamano
2017-02-07 20:37 ` Junio C Hamano
2017-02-09 3:58 ` Jeff King
2017-02-09 5:14 ` Junio C Hamano
2017-02-09 5:20 ` Jeff King
2017-02-14 9:43 ` Stefan Hajnoczi
2017-01-20 23:11 ` [PATCH v2 0/2] grep: make output consistent with revision syntax 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=20170120235133.GA146274@google.com \
--to=bmwill@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=stefanha@redhat.com \
/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.