# Generating git repository stats

I added some bash scripts to a repository I currently maintain for a project at my university. We wanted some scripts to generate git repository statistics and parse them to CSV, to be able to plot them with gnuplot lateron easily. The idea is that we can simply invoke make to build the whole thing with updated git statistics and everything (it is a tex document). Here are some of these scripts…

# The full history, please, James!

First, let us generate a CSV which contains the full history, including (short) commit hashes, author names, dates and the header of the commit messages:

git log --date=local --pretty=format:"%h%x09%an%x09%ad%x09%s"


As simple as git is, as simple is this script. It’s kind of cryptic, as we print x09, which is a tabulator, but it works perfectly! You can also change the --date part to iso to generate ISO dates!

# Weekend work, or what?

With this neat piece of bash, we can check how much work was done at weekend days:

for i in Mon Tue Wed Thu Fri Sat Sun
do
echo -en "$i\t" echo$(git shortlog -n --format='%ad %s'| grep "$i " | wc -l) done  Example output: Mon 53 Tue 58 Wed 85 Thu 69 Fri 49 Sat 16 Sun 32  Neat, isn’t it? # Do we work at night? Well, the stuff about the weekdays is really neat, but we can also check if the commiters are morning grouches: for i in seq -w 0 23 do echo -ne "$i\t"
echo $(git shortlog -n --format='%ad %s' | grep "$i:" | wc -l)
done


Example output for this:

00      14
01      9
02      0
03      0
04      0
05      0
06      0
07      0
08      0
09      1
10      5
11      10
12      6
13      15
14      69
15      13
16      21
17      39
18      44
19      21
20      17
21      23
22      36
23      19


As you can see, we work the whole day, from 9 AM until 1 AM! But I think as the project goes on, we will also fill the gap between 2 AM and 8 AM! I hope you found this stuff interesting! I don’t know much about gnuplot, the gnuplot part will be done by another project member (hopefully), but I guess this should be easily parseable by gnuplot!