From 67c4df0cdce31076e6b91028a1e14c0567e4d7f9 Mon Sep 17 00:00:00 2001 From: Blake Romero Date: Sat, 2 Nov 2024 21:57:37 +0000 Subject: Add git-activity script --- git-activity.sh | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 git-activity.sh diff --git a/git-activity.sh b/git-activity.sh new file mode 100755 index 0000000..d6df64e --- /dev/null +++ b/git-activity.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# +# GIT ACTIVITY +# (Generate a git commit frequency list in JSON) +# 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" + -- cgit