#!/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