44 lines
1.2 KiB
Python
Executable File
44 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import hashlib
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
def digest(path: Path) -> str:
|
|
return hashlib.sha256(path.read_bytes()).hexdigest()
|
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--output", type=Path, required=True)
|
|
arguments = parser.parse_args()
|
|
root = arguments.output
|
|
root.mkdir(parents=True)
|
|
(root / "nested").mkdir()
|
|
payload = bytearray()
|
|
for offset in range(384 * 1024):
|
|
payload.append(((offset * 131) ^ (offset >> 3) ^ 0x5A) & 0xFF)
|
|
(root / "payload.bin").write_bytes(payload)
|
|
(root / "nested" / "alpha.txt").write_text(
|
|
"Pre15 deterministic smoke fixture\n", encoding="ascii"
|
|
)
|
|
(root / "empty").write_bytes(b"")
|
|
files = []
|
|
for path in sorted(item for item in root.rglob("*") if item.is_file()):
|
|
files.append(
|
|
{
|
|
"path": path.relative_to(root).as_posix(),
|
|
"sha256": digest(path),
|
|
"size": path.stat().st_size,
|
|
}
|
|
)
|
|
manifest = {
|
|
"files": files,
|
|
"nested_entries": ["alpha.txt"],
|
|
"root_entries": ["empty", "nested", "payload.bin"],
|
|
"status": "READY",
|
|
}
|
|
print(json.dumps(manifest, indent=2, sort_keys=True))
|