python/required-symbols/compare_symbols.py

41 lines
1.1 KiB
Python
Executable file

#!/usr/bin/env python3
"""
Compare two symbol JSON files produced by collect_symbols.py.
Usage: compare_symbols.py <old.json> <new.json>
Output:
+ [module] symbol — new build adds a required symbol the old build did not have
- [module] symbol — new build drops a required symbol the old build had
Exit codes:
0 — no differences
1 — differences found
"""
import json
import sys
from pathlib import Path
old = json.loads(Path(sys.argv[1]).read_text())
new = json.loads(Path(sys.argv[2]).read_text())
all_mods = sorted(set(old) | set(new))
changes = []
for mod in all_mods:
added = sorted(set(new.get(mod, [])) - set(old.get(mod, [])))
removed = sorted(set(old.get(mod, [])) - set(new.get(mod, [])))
if added or removed:
changes.append((mod, added, removed))
if not changes:
print("OK: no symbol changes between stable and PR build")
sys.exit(0)
print("Symbol changes detected (+ new requirement in PR build, - dropped by PR build):")
for mod, added, removed in changes:
for sym in added:
print(f" + [{mod}] {sym}")
for sym in removed:
print(f" - [{mod}] {sym}")
sys.exit(1)