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:
+18
-8
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user