dotfiles/dot-stats/files-history.org

5.4 KiB
Raw Blame History

Get the data

Commit history

REPO='/home/pavel/.config/yadm/repo.git'

if [ ! -d "data" ]; then
    mkdir data
fi

# echo hash,time > data/commits.csv
# git -C $REPO log --pretty="%H,%cI" >> data/commits.csv

File lengths

declare -A paths

keys=("Emacs.org" "init.el" "init.vim" "Desktop.org" "Console.org")

paths["Emacs.org"]="Emacs.org;.emacs.d/emacs.org;config/.emacs.d/emacs.org"
paths["init.el"]=".emacs.d/init.el;config/.emacs.d/init.el"
paths["init.vim"]=".config/nvim/init.vim;config/nvim/init.vim;nvim/init.vim"
paths["Desktop.org"]="Desktop.org"
paths["Console.org"]="Console.org"
get_lengths () {
    while IFS=' ' read commit date; do

        result="$commit,$date"

        for key in "${keys[@]}"
        do
            val=0
            IFS=';' read -r -a files <<< "${paths[$key]}"
            for file in "${files[@]}"
            do
                if (( val == 0 )); then
                    val=$(git -C $REPO show $commit:$file 2>/dev/null | wc -l || 0)
                fi
            done
            result+=",$val"
        done
        # result=${result%,*}
        echo $result
    done
}

echo $(git -C $REPO log --pretty="%H %cI" | head -n 1 | get_lengths)
echo $(git -C $REPO log --pretty="%H %cI" | tail -n 1 | get_lengths)

e49d12622ee3e14751215df9aed907e3fa069e14,2021-04-21T18:01:56+03:00,2781,1801,1053,1857,544
5044283019dc34c95d2836485ed492b34f49230e,2019-03-31T13:52:50+03:00,0,0,62,0,0
header="commit,date"
for key in "${keys[@]}"
do
    header+=",$key"
done
echo $header > data/lengths.csv
git -C $REPO log --pretty="%H %cI" | get_lengths >> data/lengths.csv

Plot

Load the data

from datetime import datetime
from matplotlib import pyplot as plt
from IPython.display import display

import matplotlib as mpl
import numpy as np
import pandas as pd

mpl.rcParams['figure.dpi'] = 125
mpl.rcParams['hatch.linewidth'] = 4.0
plt.style.use('./palenight.mplstyle')
def remove_zeros(data):
    last = -1
    result = []
    for datum in data:
        if last <=0 and datum > 0:
            if len(result) > 0:
                result[-1] = 0
            result.append(datum)
            last = datum
        elif last <= 0 and datum <= 0:
            result.append(np.nan)
        elif last > 0 and datum <= 0:
            result.append(last)
        else:
            result.append(datum)
            last = datum

    return result

test = [0, 0, 0, 1, 2, 3, 0, 0, 4, 0, 0, 5, 1, 1, 6]
remove_zeros(test)
nan nan 0 1 2 3 3 3 4 4 4 5 1 1 6
df = pd.read_csv('./data/lengths.csv', parse_dates=['date'])
files = [c for c in df.columns if c not in ['commit', 'date']]
df = df[df[files].sum(axis=1) > 0]
df = df.drop('commit', axis=1)
df = df.sort_values('date').set_index('date')
df = df.apply(lambda col: remove_zeros(col) if col.name not in ['commit', 'date'] else col)
# df = df.replace(0, np.nan)

with pd.option_context('display.max_rows', 10):
    display(df)
Emacs.org init.el init.vim Desktop.org Console.org
date
2019-03-31 13:52:50+03:00 NaN NaN 62 NaN NaN
2019-03-31 20:06:29+03:00 NaN NaN 62 NaN NaN
2019-04-02 17:52:05+03:00 NaN NaN 91 NaN NaN
2019-04-03 10:36:35+03:00 NaN NaN 91 NaN NaN
2019-04-09 12:47:05+03:00 NaN NaN 91 NaN NaN
2021-04-22 22:01:59+03:00 2862.0 1909.0 1053 1857.0 544.0
2021-04-25 21:39:47+03:00 2888.0 1923.0 1053 1857.0 544.0
2021-04-26 16:16:10+03:00 2934.0 1945.0 1053 1857.0 544.0
2021-04-26 16:33:34+03:00 2935.0 1959.0 1053 1857.0 544.0
2021-04-29 20:43:34+03:00 2996.0 1990.0 1053 1857.0 544.0

251 rows × 5 columns

Plot

fig, ax = plt.subplots(figsize=(12, 6))
df[['Emacs.org', 'init.vim', 'init.el']].plot(ax=ax)
ax.grid(True, alpha=0.25)
ax.set_axisbelow(True)
ax.set_title('Emacs vs neovim config size growth')
ax.set_ylabel('LoC')
ax.text(0.075, 0.08, f'upd. {datetime.now().strftime("%Y-%m-%d")}', transform=fig.transFigure, va='top', ha='left')
pass

/sqrtminusone/dotfiles/media/commit/349e9c66aa7066a85c23914657473b3ce577df3b/dot-stats/img/emacs-vim.png