Files
gitistics/gitistics.sh

102 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
# Specify a directory with all Git repositories
REPODIR=~/Git
# Regex or fixed name (brackets need to be escaped with a backslash)
REPOUSER="\(structix\|Janek\)"
# Specify the start date, where the statistics should be gathered
STARTDATE="01 Jan 2018"
# Verbose flag
VERBOSE=false
# --------------------
# --- functions
# returns the amount of commits for one repository
function getCommits() {
# show amount of commits of all users
committemp=$(git rev-list --count --all --author=$REPOUSER --since="$STARTDATE" 2> /dev/null)
echo $committemp
}
# get the amount of files, insertions, deletions by specifying parameters
function getDiffChanges() {
local __files=$1
local __insert=$2
local __delete=$3
# calculate total changes between given date and HEAD
local extractdiff=$(git diff @{"$STARTDATE"} HEAD --shortstat 2>/dev/null)
# set the separator to ,
local IFS=','
local array=( $extractdiff )
# Parse the numbers
local extf=${array[0]//[!0-9]}
local exti=${array[1]//[!0-9]}
local extd=${array[2]//[!0-9]}
if [ "$VERBOSE" = true ]; then
echo "Files: $extf, Insertions: $exti, Deletions: $extd"
fi
local f=$(( extf + __files))
local i=$(( exti + __insert))
local d=$(( extd + __delete))
eval $__files="'$f'"
eval $__insert="'$i'"
eval $__delete="'$d'"
}
function main() {
# Switch into the REPODIR (silently)
pushd $REPODIR 1> /dev/null
# Iterate over all subdirectories
for dir in $REPODIR/*/
do
dir=${dir%*/}
if [ "$VERBOSE" = true ]; then
echo ${dir##*/}
fi
# enter directory
cd ${dir##*/}
# --- RUN COMMANDS
commtemp=$(getCommits)
# Add to the total commit counter
commitcounter=$((commitcounter + commtemp))
# Output the commit counter of the current iteration
if [ "$VERBOSE" = true ]; then
echo $commtemp
fi
getDiffChanges totalfiles totalinsertions totaldeletions
# go back
cd ..
done
# Switch back to the original directory state (silently)
popd 1> /dev/null
echo "-------------------------"
echo "Total commits since $STARTDATE: $commitcounter"
echo "Total files changed: $totalfiles"
echo "Total insertions: $totalinsertions"
echo "Total deletions: $totaldeletions"
}
main