prepare-patch.py 1.8 KB

1234567891011121314151617181920212223242526272829303132
  1. from pathlib import Path
  2. import difflib
  3. import hashlib
  4. import json
  5. root = Path(__file__).parent
  6. source = Path('E:/pipe-ner-server')
  7. patch = []
  8. manifest = []
  9. for staged in sorted((root / 'pipe-network-service').rglob('*.java')):
  10. rel = staged.relative_to(root)
  11. target = source / rel
  12. before_bytes = target.read_bytes() if target.exists() else None
  13. before = before_bytes.decode('utf-8').replace('\r\n', '\n') if before_bytes is not None else ''
  14. after = staged.read_text(encoding='utf-8')
  15. if before == after:
  16. continue
  17. baseline = root / 'baseline' / rel
  18. baseline.parent.mkdir(parents=True, exist_ok=True)
  19. baseline.write_text(before, encoding='utf-8', newline='\n')
  20. diff = list(difflib.unified_diff(before.splitlines(keepends=True), after.splitlines(keepends=True),
  21. fromfile='a/' + rel.as_posix() if before_bytes is not None else '/dev/null',
  22. tofile='b/' + rel.as_posix()))
  23. patch.extend(diff)
  24. manifest.append({'path': rel.as_posix(), 'beforeSha256': hashlib.sha256(before_bytes).hexdigest() if before_bytes is not None else None,
  25. 'afterSha256': hashlib.sha256(staged.read_bytes()).hexdigest(),
  26. 'added': sum(line.startswith('+') and not line.startswith('+++') for line in diff),
  27. 'removed': sum(line.startswith('-') and not line.startswith('---') for line in diff)})
  28. (root / 'point-status-eight-buckets.patch').write_text(''.join(patch), encoding='utf-8', newline='\n')
  29. (root / 'manifest.json').write_text(json.dumps(manifest, ensure_ascii=False, indent=2), encoding='utf-8')
  30. print(f'{len(manifest)} files, +{sum(row["added"] for row in manifest)} / -{sum(row["removed"] for row in manifest)}')
  31. for row in manifest:
  32. print(f'+{row["added"]} -{row["removed"]} {row["path"]}')