← Commit history

v0.9.82: rm_tree chmod-and-retry onerror (read-only git objects in demo .history blocked cleanup)

John Lauer ·7af54d45b2 ·2mo ago ·parent b9bbf40
5 files changed +16−8
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.81+0.9.82
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.81",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.81/adom-bridge-kicad-v0.9.81.zip",-  "sha256": "7aa4415764ca5187da26322ee5563f2367e54a6e05b02121c84b41f1347b40a7",-  "size": 376754,+  "version": "0.9.82",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.82/adom-bridge-kicad-v0.9.82.zip",+  "sha256": "fc2c2bfd8196aca51b0f3a934446d97984a48a5e64a7d7e5b1c3648bc374b831",+  "size": 376847,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-14T12:59:59Z",+  "released_at": "2026-08-14T13:01:57Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
adom-bridge-kicad-v0.9.82.zipadded
⋯ 1 unchanged line ⋯
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.81",+  "version": "0.9.82",   "description": "Reverse bridge for KiCad \u2014 board/schematic introspection, lint via kicad-cli, plugin install, multi-instance probe, in-process DRC.",   "homepage": "https://wiki.adom.inc/adom/adom-bridge",   "author": "Adom Inc.",
handlers/uninstall.py+9−1
@@ -118,6 +118,14 @@ def handle_uninstall(kicad_info: dict, args: dict) -> dict:         except Exception as e:             failed.append({"item": f"{label}: {p}", "error": str(e)}) +    def _rmtree_onerror(func, path, _exc):+        # Windows: git object files are read-only; chmod +w and retry.+        try:+            os.chmod(path, 0o700)+            func(path)+        except Exception:+            raise+     def rm_tree(p: Path, label: str):         nonlocal absent         try:@@ -125,7 +133,7 @@ def handle_uninstall(kicad_info: dict, args: dict) -> dict:                 absent += 1                 return             if not dry:-                shutil.rmtree(p, ignore_errors=False)+                shutil.rmtree(p, onerror=_rmtree_onerror)             removed.append(f"{label}: {p}")         except Exception as e:             failed.append({"item": f"{label}: {p}", "error": str(e)})