summaryrefslogtreecommitdiff
path: root/git-activity.sh
blob: 0d9e2b5f3e3e05e5e71e43d05a63204d0b335535 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/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"