summaryrefslogtreecommitdiff
path: root/git-activity.sh
diff options
context:
space:
mode:
Diffstat (limited to 'git-activity.sh')
-rwxr-xr-xgit-activity.sh81
1 files changed, 81 insertions, 0 deletions
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"
+