How to get Git log with short stat in one line?

git, git-log, shell, text-manipulation, text-processing

Solution

git log  --oneline --pretty="@%h"  --stat   |grep -v \| |  tr "\n" " "  |  tr "@" "\n"

This will show something like this:

a596f1e   1 file changed, 6 insertions(+), 3 deletions(-) 
4a9a4a1   1 file changed, 6 deletions(-) 
b8325fd   1 file changed, 65 insertions(+), 4 deletions(-) 
968ef81   1 file changed, 4 insertions(+), 5 deletions(-) 

Problem

Following command outputs following lines of text on console ``` git log --pretty=format:"%h;%ai;%s" --shortstat ed6e0ab;2014-01-07 16:32:39 +0530;Foo 3 files changed, 14 insertions(+), 13 deletions(-) cdfbb10;2014-01-07 14:59:48 +0530;Bar 1 file changed, 21 insertions(+) 5fde3e1;2014-01-06 17:26:40 +0530;Merge Baz 772b277;2014-01-06 17:09:42 +0530;Qux 7 files changed, 72 insertions(+), 7 deletions(-) ``` I'm interested in having above format to be displayed like this ``` ed6e0ab;2014-01-07 16:32:39 +0530;Foo;3;14;13 cdfbb10;2014-01-07 14:59:48 +0530;Bar;1;21;0 5fde3e1;2014-01-06 17:26:40 +0530;Merge Baz;0;0;0 772b277;2014-01-06 17:09:42 +0530;Qux;7;72;7 ``` This will be consumed in some report which can parse semicolon separated values. The thing is the text `"\n 3 files changed, 14 insertions(+), 13 deletions(-)"` (new line included) gets converted to `3;14;13` (without new line) One possible corner case is text like `"5fde3e1;2014-01-06 17:26:40 +0530;Merge Baz"` which doesn't have such line. In that case I want `;0;0;0` Overall the goal is to analyze file change stats over a period of time. I read the git log documentation but couldn't find any format which will help me to render in this format. The best I came up was the above command mentioned. So any command or shell script which can generate the expected format would be of great help. Thanks!

Original source