Manage Kits as embedded panel, fix checksum zero-padding mismatch

Manage Kits now opens inside the editor pane (like Properties and Link
View) instead of a separate Toplevel window. Also normalize hex
checksums by stripping leading zeros so .kit and manifest filenames
that disagree on padding (e.g. 462d43e vs 0462d43e) still resolve to
a version.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-09-08 21:08:59 +03:00
co-authored by Claude Opus 4.6
parent da0e18a9c3
commit a77edead25
4 changed files with 197 additions and 158 deletions
+18 -8
View File
@@ -46,8 +46,17 @@ def version_sort_key(version_string):
return numbers or [0]
def _norm_checksum(checksum):
"""Strips leading zeros so differently-padded hex checksums compare equal."""
return checksum.lstrip("0") if checksum else checksum
def kit_versions(kit_name):
"""Maps checksum -> version string, read from the .kit filenames under kits/."""
"""Maps checksum -> version string, read from the .kit filenames under kits/.
Keys are stored with leading zeros stripped because .kit files and manifest
filenames sometimes disagree on padding (e.g. 462d43e vs 0462d43e).
"""
if kit_name in _versions_cache:
return _versions_cache[kit_name]
@@ -58,7 +67,7 @@ def kit_versions(kit_name):
for entry in os.listdir(kit_dir):
match = pattern.match(entry)
if match:
versions[match.group(1)] = match.group(2)
versions[_norm_checksum(match.group(1))] = match.group(2)
_versions_cache[kit_name] = versions
return versions
@@ -89,13 +98,14 @@ def resolve_manifest_path(kit_name):
if pinned:
candidate = f"{kit_name}-{pinned}.xml"
if candidate in manifests:
return os.path.join(kit_dir, candidate), versions.get(pinned, pinned)
return os.path.join(kit_dir, candidate), versions.get(_norm_checksum(pinned), pinned)
available = []
for entry in manifests:
checksum = entry[len(kit_name) + 1:-4]
if checksum in versions:
available.append((version_sort_key(versions[checksum]), entry, versions[checksum]))
norm = _norm_checksum(checksum)
if norm in versions:
available.append((version_sort_key(versions[norm]), entry, versions[norm]))
if available:
available.sort()
@@ -104,7 +114,7 @@ def resolve_manifest_path(kit_name):
entry = manifests[-1]
checksum = entry[len(kit_name) + 1:-4]
return os.path.join(kit_dir, entry), versions.get(checksum, "")
return os.path.join(kit_dir, entry), versions.get(_norm_checksum(checksum), "")
def kit_builds(kit_name):
@@ -125,7 +135,7 @@ def kit_builds(kit_name):
if not (entry.startswith(f"{kit_name}-") and entry.endswith(".xml")):
continue
checksum = entry[len(kit_name) + 1:-4]
builds.append((versions.get(checksum, ""), checksum))
builds.append((versions.get(_norm_checksum(checksum), ""), checksum))
builds.sort(
key=lambda build: (bool(build[0]), version_sort_key(build[0])),
@@ -184,7 +194,7 @@ def version_for_checksum(kit_name, checksum):
"""
if not checksum:
return ""
return kit_versions(kit_name).get(checksum, "")
return kit_versions(kit_name).get(_norm_checksum(checksum), "")
def _find_type(qualified_name):