from pathlib import Path import hashlib, json, shutil root = Path(__file__).resolve().parent / 'package46' record = json.loads((root / 'extraction-check.json').read_text()) bundle = Path(record['bundle']) sha = lambda p: hashlib.sha256(p.read_bytes()).hexdigest() assert sha(bundle / 'arcadia-studio.exe') == 'e9cce9355525ecdc59bfae12608b1e0272167acef5a86b25368ef547e08886ff' assert sha(bundle / 'libunwind.dll') == 'f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4' native = root / 'qa/native46' native.mkdir() (native / 'captures').mkdir() work = root / 'working' work.mkdir() fixture = bundle / 'examples/release1' def inventory(p): return {f.relative_to(p).as_posix(): {'bytes': f.stat().st_size, 'sha256': sha(f)} for f in p.rglob('*') if f.is_file()} baseline = inventory(fixture) assert len(baseline) == 37 for name in ['collision-a', 'external-b']: shutil.copytree(fixture, work / name) assert inventory(work / name) == baseline fresh = work / 'fresh-c' fresh.mkdir() for f in fixture.rglob('*'): if f.is_file() and f.suffix != '.arcadia': p = fresh / f.relative_to(fixture) p.parent.mkdir(parents=True, exist_ok=True) shutil.copyfile(f, p) assert len(inventory(fresh)) == 7 and not list(fresh.rglob('*.arcadia')) receipt = {'source': '0e83157e09d52e6152df91208e41693b62da2d46', 'package_documentation_source': 'ef28f1784efe6717b0ca72c0eb3c97bc30ebfe47', 'archive_sha256': record['archive_sha256'], 'bundle': str(bundle), 'baseline': baseline, 'fresh_companions': inventory(fresh), 'declared_rename': {'activity': '61f7bbfb-74a4-5540-9182-2583dfb27a49', 'before': 'Assess pressure alarm', 'after': 'Assess pressure alarm Package46'}, 'external_dependency': 'oa/activities/activity_oa_restore_work.arcadia', 'external_comment': '\n// Package46 observed external-edit probe\n'} with (native / 'baseline.json').open('x', encoding='utf-8') as f: json.dump(receipt, f, indent=2); f.write('\n') print(json.dumps({k: v for k, v in receipt.items() if k not in ['baseline', 'fresh_companions']}, indent=2))