threads / discuss / 45267

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

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

## tl;dr

5 messages between Mar 3, 2017 and Mar 3, 2017.

replies: 4people: 3as markdown or json

Thomas Braun· Mar 3, 2017, 00:52 UTC · lore
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· Mar 3, 2017, 01:36 UTC · re: Thomas Braun · lore

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

On Thu, Mar 2, 2017 at 4:52 PM, Thomas Braun <thomas.braun@virtuell-zuhause.de> wrote:

Show 8 quoted lines
>
> 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· Mar 3, 2017, 05:17 UTC · re: Junio C Hamano · lore

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

On Thu, Mar 02, 2017 at 05:36:17PM -0800, Junio C Hamano wrote:
Show 16 quoted lines
> 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· Mar 3, 2017, 16:07 UTC · re: Jeff King · lore

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

Jeff King <peff@peff.net> writes:
Show 13 quoted lines
> 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· Mar 3, 2017, 18:05 UTC · re: Junio C Hamano · lore

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

Am 03.03.2017 um 17:07 schrieb Junio C Hamano:
Show 36 quoted lines
> 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

← back to recent threads