fix: clean platform/emulator page layout

This commit is contained in:
Abdessamad Derraz
2026-03-18 10:27:08 +01:00
parent b15b062782
commit 883e153a62

View File

@@ -208,34 +208,41 @@ def generate_platform_page(name: str, cov: dict) -> str:
by_system.setdefault(sys_id, []).append(d) by_system.setdefault(sys_id, []).append(d)
for sys_id, files in sorted(by_system.items()): for sys_id, files in sorted(by_system.items()):
ok_count = sum(1 for f in files if f["status"] == "ok")
total = len(files)
lines.append(f"## {sys_id}") lines.append(f"## {sys_id}")
lines.append(f"")
lines.append(f"{ok_count}/{total} verified")
lines.append("") lines.append("")
lines.append("| File | Status | Detail |")
lines.append("|------|--------|--------|")
for f in sorted(files, key=lambda x: x["name"]): # Only show table if there are non-OK entries, otherwise just list filenames
status = f["status"] non_ok = [f for f in files if f["status"] != "ok"]
detail = "" if non_ok:
if status == "ok": lines.append("| File | Status | Detail |")
status_display = "OK" lines.append("|------|--------|--------|")
elif status == "untested": for f in sorted(non_ok, key=lambda x: x["name"]):
reason = f.get("reason", "") status = f["status"]
expected = f.get("expected_md5", "") detail = ""
actual = f.get("actual_md5", "") if status == "untested":
if reason: reason = f.get("reason", "")
detail = reason expected = f.get("expected_md5", "")
elif expected and actual: actual = f.get("actual_md5", "")
detail = f"expected {expected[:12]}... got {actual[:12]}..." detail = reason or (f"expected `{expected[:12]}...` got `{actual[:12]}...`" if expected and actual else "")
status_display = "Untested" status_display = "Untested"
elif status == "missing": elif status == "missing":
status_display = "Missing" status_display = "Missing"
detail = f.get("expected_md5", "unknown") detail = f"Expected: `{f.get('expected_md5', 'unknown')}`"
else: else:
status_display = status status_display = status
lines.append(f"| `{f['name']}` | {status_display} | {detail} |")
lines.append("")
lines.append(f"| `{f['name']}` | {status_display} | {detail} |") ok_files = [f for f in files if f["status"] == "ok"]
if ok_files:
lines.append("") unique_names = sorted(set(f["name"] for f in ok_files))
names = ", ".join(f"`{n}`" for n in unique_names)
lines.append(f"Files: {names}")
lines.append("")
lines.append(f"*Generated on {_timestamp()}*") lines.append(f"*Generated on {_timestamp()}*")
return "\n".join(lines) + "\n" return "\n".join(lines) + "\n"
@@ -395,18 +402,20 @@ def generate_emulator_page(name: str, profile: dict, db: dict) -> str:
files = profile.get("files", []) files = profile.get("files", [])
lines = [ lines = [
f"# {display} - {SITE_NAME}", f"# {emu_name} - {SITE_NAME}",
"", "",
f"**Type:** {emu_type}", f"| | |",
f"|---|---|",
f"| Type | {emu_type} |",
] ]
if source: if source:
lines.append(f"**Source:** [{source}]({source})") lines.append(f"| Source | [{source}]({source}) |")
lines.append(f"**Version:** {version}") lines.append(f"| Version | {version} |")
lines.append(f"**Profiled:** {profiled}") lines.append(f"| Profiled | {profiled} |")
if cores: if cores:
lines.append(f"**Cores:** {', '.join(str(c) for c in cores)}") lines.append(f"| Cores | {', '.join(str(c) for c in cores)} |")
if systems: if systems:
lines.append(f"**Systems:** {', '.join(str(s) for s in systems)}") lines.append(f"| Systems | {', '.join(str(s) for s in systems)} |")
lines.append("") lines.append("")
if not files: if not files:
@@ -416,18 +425,29 @@ def generate_emulator_page(name: str, profile: dict, db: dict) -> str:
lines.extend(["", str(note)]) lines.extend(["", str(note)])
else: else:
by_name = db.get("indexes", {}).get("by_name", {}) by_name = db.get("indexes", {}).get("by_name", {})
lines.append(f"**{len(files)} files:**") in_repo_count = sum(1 for f in files if f.get("name", "") in by_name)
missing_count = len(files) - in_repo_count
lines.append(f"**{len(files)} files** ({in_repo_count} in repo, {missing_count} missing)")
lines.append("") lines.append("")
lines.append("| File | Required | In Repo | Source Ref | Note |")
lines.append("|------|----------|---------|-----------|------|") has_notes = any(f.get("note") for f in files)
if has_notes:
lines.append("| File | Required | In Repo | Source Ref | Note |")
lines.append("|------|----------|---------|-----------|------|")
else:
lines.append("| File | Required | In Repo | Source Ref |")
lines.append("|------|----------|---------|-----------|")
for f in files: for f in files:
fname = f.get("name", "") fname = f.get("name", "")
required = "yes" if f.get("required") else "no" required = "yes" if f.get("required") else "no"
in_repo = "yes" if fname in by_name else "no" in_repo = "yes" if fname in by_name else "no"
source_ref = f.get("source_ref", "") source_ref = f.get("source_ref", "")
note = f.get("note", "") if has_notes:
lines.append(f"| `{fname}` | {required} | {in_repo} | {source_ref} | {note} |") note = f.get("note", "")
lines.append(f"| `{fname}` | {required} | {in_repo} | {source_ref} | {note} |")
else:
lines.append(f"| `{fname}` | {required} | {in_repo} | {source_ref} |")
lines.extend(["", f"*Generated on {_timestamp()}*"]) lines.extend(["", f"*Generated on {_timestamp()}*"])
return "\n".join(lines) + "\n" return "\n".join(lines) + "\n"