from pathlib import Path import hashlib,json,shutil,sys r=Path('/home/jakub/devel/escapistsrereintroduced');f=r/'.build/playtest-source-2026-10-03-ground-supply';b=Path('/tmp/erri-gameplay-root-0914');sys.path.insert(0,str(r/'tools'));from source_manifest import addon_manifest m=addon_manifest(r);f.mkdir(exist_ok=False) for n in m: p=f/n;p.parent.mkdir(parents=True,exist_ok=True);shutil.copyfile(r/n,p) for p in (r/'addons/core').glob('resourceDatabase.rdb*'):shutil.copyfile(p,f/'addons/core'/p.name) for folder in ['tools','tests','terrain-profiles','terrain-adapters','terrain-integrations']:shutil.copytree(r/folder,f/folder,ignore=shutil.ignore_patterns('__pycache__','*.pyc')) (f/'docs').mkdir() for p in (r/'docs').iterdir(): if p.is_file():shutil.copyfile(p,f/'docs'/p.name) (f/'docs/evidence').symlink_to(r/'docs/evidence',target_is_directory=True) for n in ['README.md','.gitignore']:shutil.copyfile(r/n,f/n) (f/'frozen-source.json').write_text(json.dumps(m,indent=2)+'\n') assert addon_manifest(f)==m (b/'frozen-source.json').write_text(json.dumps(m,indent=2)+'\n') print('Frozen authored source files:',len(m))