All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Braun <thomas.braun@virtuell-zuhause.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, peff@peff.net
Subject: Re: [PATCH v1 1/2] log -G: Ignore binary files
Date: Wed, 28 Nov 2018 12:31:03 +0100 (CET)	[thread overview]
Message-ID: <1687320635.1640.1543404663287@ox.hosteurope.de> (raw)
In-Reply-To: <xmqq4lc96gsg.fsf@gitster-ct.c.googlers.com>

> Junio C Hamano <gitster@pobox.com> hat am 22. November 2018 um 02:29 geschrieben:
> 
> 
> Thomas Braun <thomas.braun@virtuell-zuhause.de> writes:
> 
> > The -G <regex> option of log looks for the differences whose patch text
> > contains added/removed lines that match regex.
> >
> > The concept of differences only makes sense for text files, therefore
> > we need to ignore binary files when searching with -G <regex> as well.
> >
> > Signed-off-by: Thomas Braun <thomas.braun@virtuell-zuhause.de>
> > ---
> >  Documentation/gitdiffcore.txt |  2 +-
> >  diffcore-pickaxe.c            |  5 +++++
> >  t/t4209-log-pickaxe.sh        | 22 ++++++++++++++++++++++
> >  3 files changed, 28 insertions(+), 1 deletion(-)
> 
> OK.
> 
> > diff --git a/Documentation/gitdiffcore.txt b/Documentation/gitdiffcore.txt
> > index c0a60f3158..059ddd3431 100644
> > --- a/Documentation/gitdiffcore.txt
> > +++ b/Documentation/gitdiffcore.txt
> > @@ -242,7 +242,7 @@ textual diff has an added or a deleted line that matches the given
> >  regular expression.  This means that it will detect in-file (or what
> >  rename-detection considers the same file) moves, which is noise.  The
> >  implementation runs diff twice and greps, and this can be quite
> > -expensive.
> > +expensive.  Binary files without textconv filter are ignored.
> 
> OK.
> 
> > diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c
> > index 69fc55ea1e..8c2558b07d 100644
> > --- a/diffcore-pickaxe.c
> > +++ b/diffcore-pickaxe.c
> > @@ -144,6 +144,11 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,
> >  		textconv_two = get_textconv(o->repo->index, p->two);
> >  	}
> >  
> > +	if ((o->pickaxe_opts & DIFF_PICKAXE_KIND_G) &&
> > +	    ((!textconv_one && diff_filespec_is_binary(o->repo, p->one)) ||
> > +	     (!textconv_two && diff_filespec_is_binary(o->repo, p->two))))
> > +		return 0;
> > +
> >  	/*
> >  	 * If we have an unmodified pair, we know that the count will be the
> >  	 * same and don't even have to load the blobs. Unless textconv is in
> 
> Shouldn't this new test come after the existing optimization, which
> allows us to leave without loading the blob contents (which is
> needed once you call diff_filespec_is_binary())?

Yes, good point.

> > diff --git a/t/t4209-log-pickaxe.sh b/t/t4209-log-pickaxe.sh
> > index 844df760f7..42cc8afd8b 100755
> > --- a/t/t4209-log-pickaxe.sh
> > +++ b/t/t4209-log-pickaxe.sh
> > @@ -106,4 +106,26 @@ test_expect_success 'log -S --no-textconv (missing textconv tool)' '
> >  	rm .gitattributes
> >  '
> >  
> > +test_expect_success 'log -G ignores binary files' '
> > +	rm -rf .git &&
> > +	git init &&
> 
> Please never never ever do the above two unless you are writing a
> test that checks low-level repository details.
> 
> If you want a clean history that has specific lineage of commits
> without getting affected by commits that have been made by the
> previous test pieces, it is OK to "checkout --orphan" to create an
> empty history to work with.

Thanks for the hint. I thought I had seen a less intrusive way for getting an empty history. 
Changed.

> > +	printf "a\0b" >data.bin &&
> > +	git add data.bin &&
> > +	git commit -m "message" &&
> > +	git log -G a >result &&
> > +	test_must_be_empty result
> > +'
> > +
> > +test_expect_success 'log -G looks into binary files with textconv filter' '
> > +	rm -rf .git &&
> > +	git init &&
> > +	echo "* diff=bin" > .gitattributes &&
> > +	printf "a\0b" >data.bin &&
> > +	git add data.bin &&
> > +	git commit -m "message" &&
> > +	git -c diff.bin.textconv=cat log -G a >actual &&
> > +	git log >expected &&
> > +	test_cmp actual expected
> > +'
> > +
> >  test_done
>

  reply	other threads:[~2018-11-28 11:31 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-21 20:52 [PATCH 0/2] Teach log -G to ignore binary files Thomas Braun
2018-11-21 20:52 ` [PATCH v1 1/2] log -G: Ignore " Thomas Braun
2018-11-21 20:52   ` [PATCH v1 2/2] log -S: Add test which searches in " Thomas Braun
2018-11-21 21:00     ` [PATCH 0/2] Teach log -G to ignore " Thomas Braun
2018-11-28 11:32       ` [PATCH v2] log -G: Ignore " Thomas Braun
2018-11-28 12:54         ` Ævar Arnfjörð Bjarmason
2018-12-14 18:44           ` Thomas Braun
2018-11-29  7:10         ` Junio C Hamano
2018-11-29  7:22           ` Junio C Hamano
2018-12-14 18:45             ` Thomas Braun
2018-12-14 18:45           ` Thomas Braun
2018-12-14 18:49       ` [PATCH v3] log -G: ignore " Thomas Braun
2018-12-26 23:24         ` Junio C Hamano
2018-11-22  1:34     ` [PATCH v1 2/2] log -S: Add test which searches in " Junio C Hamano
2018-11-28 11:31       ` Thomas Braun
2018-11-22  9:14     ` Ævar Arnfjörð Bjarmason
2018-11-24  2:27       ` Junio C Hamano
2018-11-28 11:31       ` Thomas Braun
2018-11-22  1:29   ` [PATCH v1 1/2] log -G: Ignore " Junio C Hamano
2018-11-28 11:31     ` Thomas Braun [this message]
2018-11-22 10:16   ` Ævar Arnfjörð Bjarmason
2018-11-22 16:27     ` Jeff King
2018-11-28 11:31     ` Thomas Braun
2018-11-28 11:31     ` Thomas Braun
2018-11-22 16:20   ` Jeff King
2018-11-24  2:32     ` Junio C Hamano
2018-11-28 11:31     ` Thomas Braun
2018-11-26 20:19   ` Stefan Beller
2018-11-27  0:51     ` Junio C Hamano
2018-11-28 11:31       ` Thomas Braun

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=1687320635.1640.1543404663287@ox.hosteurope.de \
    --to=thomas.braun@virtuell-zuhause.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.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 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.