mirror of
https://github.com/towishy/Owen-Graphite.git
synced 2026-07-22 04:40:30 +00:00
49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""Diff two effective snapshot JSON files."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import argparse
|
||
|
|
import json
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
|
||
|
|
def main() -> int:
|
||
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
||
|
|
parser.add_argument("baseline", type=Path)
|
||
|
|
parser.add_argument("candidate", type=Path)
|
||
|
|
parser.add_argument("--limit", type=int, default=200)
|
||
|
|
args = parser.parse_args()
|
||
|
|
baseline = json.loads(args.baseline.read_text(encoding="utf-8"))
|
||
|
|
candidate = json.loads(args.candidate.read_text(encoding="utf-8"))
|
||
|
|
failures: list[str] = []
|
||
|
|
b_targets = baseline.get("targets", {})
|
||
|
|
c_targets = candidate.get("targets", {})
|
||
|
|
for target in sorted(set(b_targets) | set(c_targets)):
|
||
|
|
if target not in b_targets:
|
||
|
|
failures.append(f"EXTRA target {target}")
|
||
|
|
continue
|
||
|
|
if target not in c_targets:
|
||
|
|
failures.append(f"MISSING target {target}")
|
||
|
|
continue
|
||
|
|
for part in ("element", "before", "after"):
|
||
|
|
b_part = b_targets[target].get(part, {})
|
||
|
|
c_part = c_targets[target].get(part, {})
|
||
|
|
for prop in sorted(set(b_part) | set(c_part)):
|
||
|
|
if prop == "__tokens":
|
||
|
|
continue
|
||
|
|
if b_part.get(prop) != c_part.get(prop):
|
||
|
|
failures.append(f"{target}.{part}.{prop}: {b_part.get(prop)!r} != {c_part.get(prop)!r}")
|
||
|
|
if failures:
|
||
|
|
print(f"DIFF: {len(failures)} effective snapshot differences")
|
||
|
|
for failure in failures[: args.limit]:
|
||
|
|
print(f" - {failure}")
|
||
|
|
if len(failures) > args.limit:
|
||
|
|
print(f" ... (+{len(failures) - args.limit} more)")
|
||
|
|
return 1
|
||
|
|
print("OK: effective snapshots match")
|
||
|
|
return 0
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
raise SystemExit(main())
|