Blog

レポジトリの中に含まれる kotlin/java ファイル数を歴史込みで集計する

TSV が出るので、出たら tableau とかで集計する。

# XXX git checkout --force するんで手元がぶっ壊れるので注意してね! XXX
import subprocess
import os
from datetime import datetime, timedelta, date
 
 
print("ago\tlanguage\tfiles\tlines")
 
subprocess.run(['git', 'stash', '--quiet'])
subprocess.run(['git', 'checkout', '--quiet', 'master'])
 
for ago in range(1, 500, 10):
    cmd = '''git log --before '%d day ago' -n 1 --oneline "--format=format:%%H %%aI" | sed -e "s/T.*//" ''' % ago
    res = subprocess.run(['/bin/sh', '-c', cmd], capture_output=True)
    splitted = res.stdout.decode().rstrip().split(' ')
    commit = splitted[0]
    date = splitted[1]
    subprocess.run(['git', 'checkout', '--force', '--quiet', commit])
 
    kotlin_cnt = 0
    kotlin_lines = 0
    java_cnt = 0
    java_lines = 0
    for dirName, subdirList, fileList in os.walk('.'):
        for fname in fileList:
            if fname.endswith('.kt'):
                kotlin_cnt += 1
                kotlin_lines += sum(1 for line in open(f"{dirName}/{fname}"))
            elif fname.endswith('.java'):
                java_cnt += 1
                java_lines += sum(1 for line in open(f"{dirName}/{fname}"))
 
    print(f"{date}\tkotlin\t{kotlin_cnt}\t{kotlin_lines}")
    print(f"{date}\tjava\t{java_cnt}\t{java_lines}")