mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-11 14:03:23 -05:00
refactor: simplify pack label, hash merge, diff exit
This commit is contained in:
1 parent
31e86b6db5
commit
13995047fc
4 files changed
+25
-21
No files matched your search
@@ -207,7 +207,8 @@ def main() -> None:
|
||||
json.dump(reports, sys.stdout, indent=2)
|
||||
print()
|
||||
|
||||
if compared < len(platforms) and (args.platform or not compared):
|
||||
# A named platform must be compared; --all must compare at least one.
|
||||
if compared < (len(platforms) if args.platform else 1):
|
||||
print(f"compared {compared} of {len(platforms)} platform(s)", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
@@ -90,16 +90,12 @@ class NativeFile:
|
||||
return platform_values
|
||||
if source == "truth":
|
||||
return truth_values
|
||||
if truth_values and platform_values and not set(truth_values) & set(
|
||||
platform_values
|
||||
):
|
||||
if not truth_values:
|
||||
return platform_values
|
||||
if not set(truth_values) & set(platform_values):
|
||||
return truth_values
|
||||
if truth_values:
|
||||
# Keep the platform's extra accepted revisions alongside ours.
|
||||
merged = list(truth_values)
|
||||
merged.extend(v for v in platform_values if v not in merged)
|
||||
return merged
|
||||
return platform_values
|
||||
# Keep the platform's extra accepted revisions alongside ours.
|
||||
return truth_values + [v for v in platform_values if v not in truth_values]
|
||||
|
||||
def hash(self, field_name: str) -> str:
|
||||
values = self.hashes(field_name)
|
||||
|
||||
+9
-6
@@ -71,6 +71,14 @@ def parse_verify_counts(output: str) -> dict[str, tuple[int, int]]:
|
||||
return counts
|
||||
|
||||
|
||||
def _full_pack_label(label: str) -> str:
|
||||
"""The pack name, or "" for a reduced variant such as [source=platform]."""
|
||||
meta = re.search(r"\s+\[([^\]]+)\]$", label)
|
||||
if meta is None:
|
||||
return label
|
||||
return label[: meta.start()] if meta.group(1) == "source=full" else ""
|
||||
|
||||
|
||||
def parse_pack_counts(output: str) -> dict[str, tuple[int, int]]:
|
||||
"""Extract per-pack OK/total from generate_pack output.
|
||||
|
||||
@@ -85,11 +93,7 @@ def parse_pack_counts(output: str) -> dict[str, tuple[int, int]]:
|
||||
# the full, unreduced pack is what verify describes: with
|
||||
# --all-variants the six variants shared one label and the last
|
||||
# (platform, required) was compared to the full report.
|
||||
label = m.group(1).strip()
|
||||
meta = re.search(r"\s+\[([^\]]+)\]$", label)
|
||||
current_label = label[: meta.start()] if meta else label
|
||||
if meta and meta.group(1) != "source=full":
|
||||
current_label = ""
|
||||
current_label = _full_pack_label(m.group(1).strip())
|
||||
continue
|
||||
if not current_label:
|
||||
continue
|
||||
@@ -99,7 +103,6 @@ def parse_pack_counts(output: str) -> dict[str, tuple[int, int]]:
|
||||
base_m = re.search(r"\((\d+) baseline", line)
|
||||
ok_m = re.search(r"(\d+)/(\d+) files OK", line)
|
||||
if base_m and ok_m:
|
||||
int(base_m.group(1))
|
||||
ok, total = int(ok_m.group(1)), int(ok_m.group(2))
|
||||
counts[current_label] = (ok, total)
|
||||
elif ok_m:
|
||||
|
||||
+9
-5
@@ -350,6 +350,14 @@ def arbitrate(conflict: Conflict, mode: str, addressee: str = "platform") -> Dec
|
||||
return Decision(conflict, conflict.platform_claim, FRONTEND_CHECKS_CONTENT)
|
||||
|
||||
|
||||
def _pinned_elsewhere(claims: list[Claim], winner: str | None) -> set[str]:
|
||||
"""Emulators that pin content the served file does not carry."""
|
||||
return {
|
||||
c.emulator for c in claims
|
||||
if c.emulator and c.local_path != winner and resolution_is_hash_exact(c.status)
|
||||
}
|
||||
|
||||
|
||||
def format_decision(decision: Decision) -> str:
|
||||
"""One line naming the contested slot, the winner and the ground for it."""
|
||||
conflict = decision.conflict
|
||||
@@ -357,11 +365,7 @@ def format_decision(decision: Decision) -> str:
|
||||
winner = decision.winner.local_path
|
||||
# A claim that only matched a path is answered by whatever file sits
|
||||
# there; only one that pins content can be left wanting.
|
||||
pinned_elsewhere = {
|
||||
c.emulator for c in conflict.profile_claims
|
||||
if c.emulator and c.local_path != winner
|
||||
and resolution_is_hash_exact(c.status)
|
||||
}
|
||||
pinned_elsewhere = _pinned_elsewhere(conflict.profile_claims, winner)
|
||||
served = sorted({
|
||||
c.emulator for c in conflict.profile_claims if c.emulator
|
||||
} - pinned_elsewhere)
|
||||
|
||||
Reference in new issue
Block a user