38 lines
1.8 KiB
Python
38 lines
1.8 KiB
Python
from pathlib import Path
|
|
from datetime import datetime, timezone
|
|
import hashlib
|
|
import json
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
|
|
root = Path(__file__).resolve().parent.parent
|
|
trial = root / '.local/native-qa/delete-20260912'
|
|
name, work_name, mode, baseline_name, *extra = sys.argv[1:]
|
|
assert name.replace('-', '').isalnum() and mode in ['same', 'removed']
|
|
source = (trial / work_name).resolve()
|
|
baseline = (trial / baseline_name).resolve()
|
|
assert source.is_relative_to(trial) and baseline.is_relative_to(trial)
|
|
assert source.is_dir() and baseline.is_dir()
|
|
dest = trial / 'checkpoints' / name
|
|
assert not dest.exists()
|
|
shutil.copytree(source, dest)
|
|
checker = root / '.local/native-qa/delete-oracle-warning-fix-42511f0/delete-oracle-warning-fix-42511f0.exe'
|
|
command = [str(checker), mode, str(baseline / 'project.arcadia'), str(dest / 'project.arcadia'), *extra]
|
|
run = subprocess.run(command, cwd=root, capture_output=True)
|
|
files = []
|
|
for file in sorted(dest.rglob('*')):
|
|
if file.is_file():
|
|
raw = file.read_bytes()
|
|
rel = file.relative_to(dest)
|
|
assert (source / rel).read_bytes() == raw
|
|
files.append({'path': rel.as_posix(), 'bytes': len(raw), 'sha256': hashlib.sha256(raw).hexdigest()})
|
|
log = trial / 'evidence' / (name + '.log')
|
|
log.write_bytes(run.stdout + run.stderr)
|
|
record = {'utc': datetime.now(timezone.utc).isoformat(), 'snapshot': str(dest), 'command': command,
|
|
'checker_sha256': hashlib.sha256(checker.read_bytes()).hexdigest(), 'exit': run.returncode, 'files': files}
|
|
(trial / 'evidence' / (name + '.json')).write_text(json.dumps(record, indent=2) + '\n', encoding='utf-8', newline='\n')
|
|
print(run.stdout.decode('utf-8', errors='replace'))
|
|
print(json.dumps({'name': name, 'exit': run.returncode, 'files': len(files), 'diagnostic_log': str(log)}))
|
|
sys.exit(run.returncode)
|