#!/bin/bash # # GIT ACTIVITY # # DESCRIPTION # Generate a git commit frequency list in JSON # # ARGS # 1st arg: path containing bare repositories # 2nd arg (optional): user to filter commits by # set -e if [ "$#" -eq 0 ]; then echo "Error: directory containing repositories no specified" exit 1 fi repos="$1" user="$2" outfile="/tmp/commits.json" # Check repo directory exists if [ ! -d "$repos" ]; then echo "Error: directory '$repos' does not exist!" exit 1 fi # Change to directory containing repositories cd "$repos" || exit 1 # Create an associative array declare -A commits # Loop through repos for dir in "$repos"/*.git/; do # Change to repository directory cd "$dir" || exit 1 echo "Scanning $(basename ${dir%.*})" # Get commit frequencies log=$(git log --pretty=format:'%cs %cn' | uniq -c | sed 's/^\s*//') # Filter frequency list by user [ -n "$user" ] && log=$(echo "$log" | grep "$user") # Split newlines IFS=' ' # Loops frequency list for commit in $log; do count=$(echo -e "$commit" | awk '{print $1}') date=$(echo -e "$commit" | awk '{print $2}') # Ensure empty dates have a value [[ ${commits[$date]} == "" ]] && commits[$date]=0 # Update count for date totalcommits=$((commits[$date] + count)) commits[$date]=$totalcommits # Debugging # echo "Added $totalcommits commits to $date to ${dir%.*}" done # Exit repo directory cd ../ done # Covert frequency list to JSON for k in "${!commits[@]}"; do json+="\t\"$k\": \"${commits[$k]}\",\n"; done json=$(echo -e "$json" | sort -nr) json="{\n${json%,}\n}" # Store echo -e "$json" > "$outfile" \ && echo "Updated $outfile"