inittags: some updates
[git-dm.git] / biggest-commits
blobd03b8f9a4d9ab89f507fe5c84f9b2a74eb3fa69c
1 #!/usr/bin/python
3 # List the biggest commits from an author over a given rev range
5 # biggest-commits <repo> <author> <range>
7 import subprocess, sys, re, os
9 if len(sys.argv) != 4:
10 print('Usage: biggest-commits <repo> <author> <range>')
11 sys.exit(1)
13 os.chdir(sys.argv[1])
14 commits = { }
15 ins = re.compile(r'(\d+) insertion')
16 dele = re.compile(r'(\d+) deletion')
18 cmd = [ '/usr/bin/git', 'log', '--pretty=oneline', '--shortstat',
19 '-i', '--no-merges', f'--author={sys.argv[2]}', sys.argv[3] ]
20 print(' '.join(cmd))
21 total = 0
23 with subprocess.Popen(cmd, stdout = subprocess.PIPE) as log:
24 line = log.stdout.readline().decode('utf8')
25 while line:
26 commit, title = line.strip().split(' ', 1)
27 line = log.stdout.readline().decode('utf8')
28 m = ins.search(line)
29 if m:
30 lines = int(m.group(1))
31 else:
32 lines = 0
33 m = dele.search(line)
34 if m:
35 lines = max(lines, int(m.group(1)))
36 commits[commit] = (lines, title)
37 total += 1
38 line = log.stdout.readline().decode('utf8')
40 print(f'{total} commits.')
41 sc = sorted(commits.keys(), key = lambda e: -commits[e][0])
42 for c in sc[:10]:
43 lines, title = commits[c]
44 print(f'{lines:6d} {c[:12]} {title}')