import hashlib,json,os,stat
from pathlib import Path
HERE=Path(__file__).resolve().parent
assert not (HERE/'manifest-zero4.json').exists(),'Do not reseal'
old=json.loads((HERE.parent/'manifest10.json').read_text())
for row in old['files']:
    f=HERE.parent/row['path'];assert f.is_file() and not f.is_symlink() and hashlib.sha256(f.read_bytes()).hexdigest()==row['sha256'] and f.stat().st_size==row['bytes'],row['path']
rows=[]
for f in sorted(HERE.rglob('*')):
    rel=f.relative_to(HERE);assert not f.is_symlink(),str(rel)
    if 'private' in rel.parts:os.chmod(f,0o700 if f.is_dir() else 0o600)
    if f.is_file():
        b=f.read_bytes();rows.append(dict(path=str(rel),bytes=len(b),sha256=hashlib.sha256(b).hexdigest(),mode=oct(stat.S_IMODE(f.stat().st_mode))))
out=dict(scope='separate zero4 8HTTP only',prior22_manifest_file_sha256=hashlib.sha256((HERE.parent/'manifest10.json').read_bytes()).hexdigest(),prior22_listed_files_unchanged=len(old['files']),files=rows)
out['seal_sha256']=hashlib.sha256(json.dumps(out,ensure_ascii=False,sort_keys=True,separators=(',',':')).encode()).hexdigest();target=HERE/'manifest-zero4.json';target.write_text(json.dumps(out,ensure_ascii=False,indent=2)+'\n');print(json.dumps(dict(files=len(rows),manifest_file_sha256=hashlib.sha256(target.read_bytes()).hexdigest(),canonical_seal_sha256=out['seal_sha256'],prior22_unchanged=len(old['files']))))
