#!/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" # -------------------- # --- 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") 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 ) local f=$(( ${array[0]//[!0-9]} + __files)) local i=$(( ${array[1]//[!0-9]} + __insert)) local d=$(( ${array[2]//[!0-9]} + __delete)) eval $__files="'$f'" eval $__insert="'$i'" eval $__delete="'$d'" } function main() { # Switch into the REPODIR pushd $REPODIR # Iterate over all subdirectories for dir in $REPODIR/*/ do dir=${dir%*/} echo ${dir##*/} # 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 echo $commtemp getDiffChanges totalfiles totalinsertions totaldeletions # go back cd .. done # Switch back to the original directory state popd echo "-------------------------" echo "Total commits since $STARTDATE: $commitcounter" echo "Total files changed: $totalfiles" echo "Total insertions: $totalinsertions" echo "Total deletions: $totaldeletions" } main