# log -S/-G (aka pickaxe) searches binary files by default

5 messages from 2017-03-03 to 2017-03-03. Participants: Thomas Braun, Junio C Hamano, Jeff King.
Thread: https://gitlist.dev/t/45267

## Thomas Braun, 2017-03-03 00:52

Subject: log -S/-G (aka pickaxe) searches binary files by default
Message-ID: <7a0992eb-adb9-a7a1-cfaa-3384bc4d3e5c@virtuell-zuhause.de>
URL: https://gitlist.dev/e/7a0992eb-adb9-a7a1-cfaa-3384bc4d3e5c%40virtuell-zuhause.de

```
Hi,

I happen to have quite large binary files in my repos.

Today I realized that a line like
git log -G a
searches also files found to be binary (or explicitly marked as binary).

Is that on purpose?
The documentation of "-G<regex>" states

"Look for differences whose patch text contains added/removed lines that
match <regex>."

which contradicts the current behaviour. At least for me text != binary.

To reproduce:
$ git init
$ echo -e "a\0b" > data.bin
$ git add data.bin
$ git commit -m "Add new data"
$ git log -p
[...]
diff --git a/data.bin b/data.bin
new file mode 100644
index 0000000..1a23e4b
Binary files /dev/null and b/data.bin differ
$ git log -G a
[...]

    Add new data

I've verified the behaviour with git version 2.12.0.windows.1 and git
version 2.12.0.189.g3bc5322 on debian.

If it is on purpose is there a config option to disable that?

Thanks for reading,
Thomas

```

## Junio C Hamano, 2017-03-03 01:36

Subject: Re: log -S/-G (aka pickaxe) searches binary files by default
Message-ID: <CAPc5daVSY5Z_+cpT1dHY-cM-TzNeu+Vzv+zouoOHW08PTFRQ7A@mail.gmail.com>
URL: https://gitlist.dev/e/CAPc5daVSY5Z_%2BcpT1dHY-cM-TzNeu%2BVzv%2BzouoOHW08PTFRQ7A%40mail.gmail.com
In-Reply-To: <7a0992eb-adb9-a7a1-cfaa-3384bc4d3e5c@virtuell-zuhause.de>

```
On Thu, Mar 2, 2017 at 4:52 PM, Thomas Braun
<thomas.braun@virtuell-zuhause.de> wrote:
>
> I happen to have quite large binary files in my repos.
>
> Today I realized that a line like
> git log -G a
> searches also files found to be binary (or explicitly marked as binary).
>
> Is that on purpose?

No, it's a mere oversight (as I do not think I never even thought
about special casing binary
files from day one, it is unlikely that you would find _any_ old
version of Git that behaves
differently).

```

## Jeff King, 2017-03-03 05:17

Subject: Re: log -S/-G (aka pickaxe) searches binary files by default
Message-ID: <20170303051721.r6pahs4vjtqqoevc@sigill.intra.peff.net>
URL: https://gitlist.dev/e/20170303051721.r6pahs4vjtqqoevc%40sigill.intra.peff.net
In-Reply-To: <CAPc5daVSY5Z_+cpT1dHY-cM-TzNeu+Vzv+zouoOHW08PTFRQ7A@mail.gmail.com>

```
On Thu, Mar 02, 2017 at 05:36:17PM -0800, Junio C Hamano wrote:

> On Thu, Mar 2, 2017 at 4:52 PM, Thomas Braun
> <thomas.braun@virtuell-zuhause.de> wrote:
> >
> > I happen to have quite large binary files in my repos.
> >
> > Today I realized that a line like
> > git log -G a
> > searches also files found to be binary (or explicitly marked as binary).
> >
> > Is that on purpose?
> 
> No, it's a mere oversight (as I do not think I never even thought
> about special casing binary
> files from day one, it is unlikely that you would find _any_ old
> version of Git that behaves
> differently).

The email focuses on "-G", and I think it is wrong to look in binary
files there, as "grep in diff" does not make sense for a binary file
that we would refuse to diff.

But the subject also mentions "-S". I always assumed it was intentional
to look in binary files there, as it is searching for a pure byte
sequence. I would not mind an option to disable that, but I think the
default should remain on.

-Peff

```

## Junio C Hamano, 2017-03-03 16:07

Subject: Re: log -S/-G (aka pickaxe) searches binary files by default
Message-ID: <xmqqzih29wdu.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqqzih29wdu.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <20170303051721.r6pahs4vjtqqoevc@sigill.intra.peff.net>

```
Jeff King <peff@peff.net> writes:

> On Thu, Mar 02, 2017 at 05:36:17PM -0800, Junio C Hamano wrote:
> ...
>> > Is that on purpose?
>> 
>> No, it's a mere oversight (as I do not think I never even thought
>> about special casing binary
>> files from day one, it is unlikely that you would find _any_ old
>> version of Git that behaves
>> differently).
>
> The email focuses on "-G", and I think it is wrong to look in binary
> files there, as "grep in diff" does not make sense for a binary file
> that we would refuse to diff.

Yeah, I agree.

> But the subject also mentions "-S". I always assumed it was intentional
> to look in binary files there, as it is searching for a pure byte
> sequence. I would not mind an option to disable that, but I think the
> default should remain on.

As the feature was built to be one of the core ingredients necessary
towards the 'ideal SCM' envisioned in

  <http://public-inbox.org/git/Pine.LNX.4.58.0504150753440.7211@ppc970.osdl.org>

"-S" is about finding "a block of text". It was merely an oversight
that we didn't add explicit code to ignore binary when we introduced
the concept of "is this text?  is it worth finding things in and
diffing binary files?".

I do agree that it may be too late and/or disruptive to change its
behaviour now, as people may grew expectations different from the
original motivation and design, though.


```

## Thomas Braun, 2017-03-03 18:05

Subject: Re: log -S/-G (aka pickaxe) searches binary files by default
Message-ID: <dcce9a68-a54d-b798-e301-bc92b7fd2cd7@virtuell-zuhause.de>
URL: https://gitlist.dev/e/dcce9a68-a54d-b798-e301-bc92b7fd2cd7%40virtuell-zuhause.de
In-Reply-To: <xmqqzih29wdu.fsf@gitster.mtv.corp.google.com>

```
Am 03.03.2017 um 17:07 schrieb Junio C Hamano:
> Jeff King <peff@peff.net> writes:
> 
>> On Thu, Mar 02, 2017 at 05:36:17PM -0800, Junio C Hamano wrote:
>> ...
>>>> Is that on purpose?
>>>
>>> No, it's a mere oversight (as I do not think I never even thought
>>> about special casing binary
>>> files from day one, it is unlikely that you would find _any_ old
>>> version of Git that behaves
>>> differently).
>>
>> The email focuses on "-G", and I think it is wrong to look in binary
>> files there, as "grep in diff" does not make sense for a binary file
>> that we would refuse to diff.
> 
> Yeah, I agree.
> 
>> But the subject also mentions "-S". I always assumed it was intentional
>> to look in binary files there, as it is searching for a pure byte
>> sequence. I would not mind an option to disable that, but I think the
>> default should remain on.
> 
> As the feature was built to be one of the core ingredients necessary
> towards the 'ideal SCM' envisioned in
> 
>   <http://public-inbox.org/git/Pine.LNX.4.58.0504150753440.7211@ppc970.osdl.org>
> 
> "-S" is about finding "a block of text". It was merely an oversight
> that we didn't add explicit code to ignore binary when we introduced
> the concept of "is this text?  is it worth finding things in and
> diffing binary files?".
> 
> I do agree that it may be too late and/or disruptive to change its
> behaviour now, as people may grew expectations different from the
> original motivation and design, though.

Thanks both for the encouraging answers.

I'll try to come up with patches in the next couple of weeks for the
following changes:
"log -G": disable looking in binaries
"log -S": add option to switch looking into binaries, defaults to true

Thomas


```
