From 536b03b34de7d398b59d32fdea6324f528163ee4 Mon Sep 17 00:00:00 2001 From: Chaim Date: Sat, 25 Apr 2026 17:49:16 +0000 Subject: [PATCH] fix: don't reactivate extensions with zero versions in sync-registry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After /release-deleted deactivates an extension (when the last release is removed from Gitea), running /sync-registry would reactivate it because the repo still exists. Now sync-registry skips reactivation when an extension has zero rows in extension_versions — those were intentionally retired and must stay deactivated. Co-Authored-By: Claude Opus 4.7 (1M context) --- app_server.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app_server.py b/app_server.py index cdeef00..f0a04ca 100644 --- a/app_server.py +++ b/app_server.py @@ -140,13 +140,18 @@ def sync_extension_registry(): added, reactivated, deactivated = [], [], [] + # Extensions deactivated via /release-deleted (zero versions) must stay deactivated even if the repo still exists. + versions_count = {r['name']: r['cnt'] for r in query( + "SELECT e.name, COUNT(ev.id) AS cnt FROM extensions e LEFT JOIN extension_versions ev ON ev.extension_id = e.id GROUP BY e.name" + )} + for name, kebab in gitea_extensions.items(): composer_name = f'{GITEA_ORG}/{kebab}' if name not in db_names: query("INSERT INTO extensions (name, composer_name, is_active) VALUES (%s, %s, true)", (name, composer_name), fetch=None) added.append(name) - elif name not in db_active: + elif name not in db_active and versions_count.get(name, 0) > 0: query("UPDATE extensions SET is_active = true, updated_at = NOW() WHERE name = %s", (name,), fetch=None) reactivated.append(name)