threads / discuss / 33328

gitdiffbinstat - git diff --shortstat -like output for changes in binary files

Subject: gitdiffbinstat - git diff --shortstat -like output for changes in binary files

## tl;dr

4 messages between Mar 29, 2013 and Mar 29, 2013.

replies: 3people: 3as markdown or json

Matthias Krüger· Mar 29, 2013, 18:07 UTC · lore

I use git mostly for game-development which means I have to deal with a lot of binary files (images, sound files etc).

When I came to a point where I had run image optimization on a branch, I wanted to know of course how much smaller the new branch was in comparison to master. Problem was that 'git diff --stat' would only summerize per-binary-file size changes and 'git diff --shortstat' did skip the binary files entirely.

To solve this problem, I wrote a script ("gitdiffbinstat") which basically runs 'git diff --stat' and summerizes the output.

The script can be found here: https://github.com/matthiaskrgr/gitdiffbinstat/blob/master/gitdiffbinstat.sh Screenshot of example output is attached.

I wondered what you guys thought about the script, is there a chance to perhaps get it included as some kind of helper script into the official git repo?

Regards, Matthias
Jeff King· Mar 29, 2013, 18:49 UTC · re: Matthias Krüger · lore

Re: gitdiffbinstat - git diff --shortstat -like output for changes in binary files

On Fri, Mar 29, 2013 at 07:07:32PM +0100, Matthias Krüger wrote:
Show 9 quoted lines
> I use git mostly for game-development which means I have to deal with
> a lot of binary files (images, sound files etc).
> 
> When I came to a point where I had run image optimization on a
> branch, I wanted to know of course how much smaller the new branch
> was in comparison to master.
> Problem was that 'git diff --stat' would only summerize
> per-binary-file size changes and 'git diff --shortstat' did skip the
> binary files entirely.

Have you tried "--summary"? Combined with --stat (or --shortstat) I wonder if it would get you closer to what you want.

-Peff
Matthias Krüger· Mar 29, 2013, 19:22 UTC · re: Jeff King · lore

Re: gitdiffbinstat - git diff --shortstat -like output for changes in binary files

On 03/29/2013 07:49 PM, Jeff King wrote:
Show 15 quoted lines
> On Fri, Mar 29, 2013 at 07:07:32PM +0100, Matthias Krüger wrote:
>
>> I use git mostly for game-development which means I have to deal with
>> a lot of binary files (images, sound files etc).
>>
>> When I came to a point where I had run image optimization on a
>> branch, I wanted to know of course how much smaller the new branch
>> was in comparison to master.
>> Problem was that 'git diff --stat' would only summerize
>> per-binary-file size changes and 'git diff --shortstat' did skip the
>> binary files entirely.
> Have you tried "--summary"? Combined with --stat (or --shortstat) I
> wonder if it would get you closer to what you want.
>
> -Peff

No it doesnt. It appears to append stuff like

  delete mode 100644 sound/music/NewTutorialStage.ogg
  delete mode 100644 src/pngfuncs.c
  delete mode 100644 src/pngfuncs.h
  delete mode 100644 src/widgets/widget_text_list.c
  delete mode 100644 src/widgets/widget_text_list.h
to the stat but does not summarize the binary file size changes.
Junio C Hamano· Mar 29, 2013, 19:30 UTC · re: Jeff King · lore

Re: gitdiffbinstat - git diff --shortstat -like output for changes in binary files

Jeff King <peff@peff.net> writes:
Show 12 quoted lines
>> I use git mostly for game-development which means I have to deal with
>> a lot of binary files (images, sound files etc).
>> 
>> When I came to a point where I had run image optimization on a
>> branch, I wanted to know of course how much smaller the new branch
>> was in comparison to master.
>> Problem was that 'git diff --stat' would only summerize
>> per-binary-file size changes and 'git diff --shortstat' did skip the
>> binary files entirely.
>
> Have you tried "--summary"? Combined with --stat (or --shortstat) I
> wonder if it would get you closer to what you want.

"diff" is not about "how much did my project grow or shink". If you moved one block of lines up or down in the same file, you will see double the number of lines moved in the statistics.

On the other hand, the use case to measure how much it helped to run png optimizers only cares about the total size.

I do not think it is a good match to present the "binary stat" next to the textual diff stats in the first place. Adding two numbers do not give us any meaningful number.

It is an interesting use case, but it just is not a problem core Git, which is a source code management system, particularly wants to bolt on a solution for, that does not mesh well with other parts of the system.

We do want to make sure that people who want to deal with binaries have access to raw statistics, so that they can build their solution on top of, though. "ls-tree -r -l" gives byte-size of each blob, and the attribute system can let you tell which paths are binaries.

← back to recent threads