btw i use nix
1#!/usr/bin/env bash
2
3cd "$1"
4
5log="$(git log --pretty=format:'%h %ad' --date=iso-strict)"
6
7prev_hash="$(git status | head -1 | awk '{print($NF) }')"
8
9echo "wordcount,timestamp" > wordcounts.csv
10while IFS= read -r line; do
11 hash="$(echo "$line" | awk '{print $1}')"
12 time="$(echo "$line" | awk '{print $2}')"
13 git checkout "$hash" || exit 1
14 wordcount="$(texcount -merge -sum -q -1 ${3:-main.tex})"
15 if [ ! -z $wordcount ]; then
16 echo "$wordcount,$time" >> wordcounts.csv
17 fi
18 if [ "$hash" == "$2" ]; then break; fi
19done <<< "$log"
20
21git checkout "$prev_hash" | exit 1
22
23echo "
24import csv
25from datetime import datetime
26import numpy as np
27import matplotlib.pyplot as plt
28import matplotlib.dates as dates
29
30with open('wordcounts.csv') as file:
31 data = [row for row in csv.reader(file)][1:]
32
33timestamps=[datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S%z') for wordcount, timestamp in data]
34wordcounts=[int(wordcount) for wordcount, timestamp in data]
35
36start=datetime.combine(datetime.date(min(timestamps)), datetime.min.time()).timestamp()
37end=max(timestamps).timestamp() + 60*60*24
38increment=60*60*6
39
40plt.figure(figsize=(12, 4))
41#plt.xticks([datetime.fromtimestamp(t) for t in np.arange(start, end, increment)])
42#plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d %H:%M'))
43#plt.gcf().autofmt_xdate()
44#plt.gcf().subplots_adjust(bottom=0.25)
45plt.plot(timestamps, wordcounts)
46
47#plt.xticks(rotation=45)
48plt.xlabel('timestamp')
49plt.ylabel('wordcount')
50plt.savefig('wordcounts.pdf')" | python3