50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description='Summarize git diff size for review planning.')
|
|
parser.add_argument('--repo', default='.', help='Repository path')
|
|
parser.add_argument('--base', default='HEAD~1', help='Base revision')
|
|
parser.add_argument('--head', default='HEAD', help='Head revision')
|
|
return parser.parse_args()
|
|
|
|
|
|
def main() -> int:
|
|
args = parse_args()
|
|
repo = Path(args.repo).resolve()
|
|
result = subprocess.run(
|
|
['git', '-C', str(repo), 'diff', '--numstat', args.base, args.head],
|
|
capture_output=True,
|
|
text=True,
|
|
check=False,
|
|
)
|
|
if result.returncode != 0:
|
|
print(result.stderr.strip() or 'git diff failed')
|
|
return result.returncode
|
|
files = 0
|
|
added = 0
|
|
deleted = 0
|
|
for line in result.stdout.splitlines():
|
|
parts = line.split(' ')
|
|
if len(parts) != 3:
|
|
continue
|
|
a, d, _ = parts
|
|
if a.isdigit():
|
|
added += int(a)
|
|
if d.isdigit():
|
|
deleted += int(d)
|
|
files += 1
|
|
print(f'files={files}')
|
|
print(f'added={added}')
|
|
print(f'deleted={deleted}')
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
raise SystemExit(main())
|