-- Leo's gemini proxy

-- Connecting to gemini.clehaxze.tw:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

Counting accumulated changes in Git


home


It's almost christmas and our team is tasked with sharing some highlights this year. We thought sharing how much code we've written is a good idea. Sure it's not a good metric for measuring productivity, but good enough for bragging rights. But.. how? `git diff --shortstat` works but I don't exactly know which commit happened 1 year ago. Hmm..



Not sure if this is the best method. But here's what I did.


git log --since='1 year ago' --stat | awk -F, '/files changed/{print $2; if($3 != "") print $3}' | awk -F' ' '{if($2 == "insertions(+)") added += $1; else deleted += $1} END {print "Added: " added ", deleted " deleted}'

How it works


First, `git log --since='1 year ago' --stat` gives you the added and deleted lines for each commit. Then an awk script is used to extract the added and deleted chunk into separate lines. Take the output I got from my GNUnet++ project as an example:


❯ git log --since='1 year ago' --stat
commit d0553a29fcc1b981ae4889d914f98b78147ab20a (HEAD -> master)
Author: marty1885 <marty188586@gmail.com>
Date:   Sun Dec 18 12:53:54 2022 +0800

    use smart pointer to handle connection lifetime

 examples/cadet/main.cpp     |  6 +++---
 gnunetpp/gnunetpp-cadet.cpp | 29 ++++++++++++++++++-----------
 gnunetpp/gnunetpp-cadet.hpp | 17 +++++++++--------
 3 files changed, 30 insertions(+), 22 deletions(-)

commit e6c029f58b5f7910235e4daf4fda8aded2992dc1
Author: marty1885 <marty188586@gmail.com>
Date:   Sun Dec 18 12:16:41 2022 +0800

    make all services non-copyable

 gnunetpp/gnunetpp-cadet.hpp | 4 +---
 gnunetpp/inner/Infra.hpp    | 3 ++-
 2 files changed, 3 insertions(+), 4 deletions(-)

commit 4275294bb3e1cbb1cbe3088a9b94f5908dc0092c
Author: marty1885 <marty188586@gmail.com>
Date:   Sun Dec 18 11:46:27 2022 +0800
...

❯ git log --since='1 year ago' --stat | awk -F, '/files changed/{print $2; if($3 != "") print $3}'
 30 insertions(+)
 22 deletions(-)
 3 insertions(+)
 4 deletions(-)
 23 insertions(+)
 7 deletions(-)
 ...

The final awk script is used to sum up the added and deleted lines.


❯ git log --since='1 year ago' --stat | awk -F, '/files changed/{print $2; if($3 != "") print $3}' | awk -F' ' '{if($2 == "insertions(+)") added += $1; else deleted += $1} END {print "Added: " added ", deleted: " deleted}'
Added: 5754, deleted: 1306

I probably should have used `git log --since='1 year ago' | tail` and `git diff` on the last commit. But somehow I never go down that route. This works good enough for me.

-- Response ended

-- Page fetched on Thu Jun 13 13:25:02 2024