from pathlib import Path import difflib import hashlib import json root = Path(__file__).parent source = Path('E:/pipe-ner-server') patch = [] manifest = [] for staged in sorted((root / 'pipe-network-service').rglob('*.java')): rel = staged.relative_to(root) target = source / rel before_bytes = target.read_bytes() if target.exists() else None before = before_bytes.decode('utf-8').replace('\r\n', '\n') if before_bytes is not None else '' after = staged.read_text(encoding='utf-8') if before == after: continue baseline = root / 'baseline' / rel baseline.parent.mkdir(parents=True, exist_ok=True) baseline.write_text(before, encoding='utf-8', newline='\n') diff = list(difflib.unified_diff(before.splitlines(keepends=True), after.splitlines(keepends=True), fromfile='a/' + rel.as_posix() if before_bytes is not None else '/dev/null', tofile='b/' + rel.as_posix())) patch.extend(diff) manifest.append({'path': rel.as_posix(), 'beforeSha256': hashlib.sha256(before_bytes).hexdigest() if before_bytes is not None else None, 'afterSha256': hashlib.sha256(staged.read_bytes()).hexdigest(), 'added': sum(line.startswith('+') and not line.startswith('+++') for line in diff), 'removed': sum(line.startswith('-') and not line.startswith('---') for line in diff)}) (root / 'point-status-eight-buckets.patch').write_text(''.join(patch), encoding='utf-8', newline='\n') (root / 'manifest.json').write_text(json.dumps(manifest, ensure_ascii=False, indent=2), encoding='utf-8') print(f'{len(manifest)} files, +{sum(row["added"] for row in manifest)} / -{sum(row["removed"] for row in manifest)}') for row in manifest: print(f'+{row["added"]} -{row["removed"]} {row["path"]}')