GitNexus/gitnexus/test
Gergo Magyar 22f34296db fix(server): unregister under the slot lock and answer 409 on DELETE /api/repo (#3374)
DELETE /api/repo called removeCheckoutStorage(storagePath) with no
unregister callback and no checkout path, swallowed every error, and
unregistered later outside the slot lock. For a shared-store slot this
left the checkout's store.json pointer behind, let an analyze re-register
between the slot removal and the unregister, and reported {deleted} even
when the slot lock could not be taken because an analyze held it.

The handler now calls removeCheckoutStorage(storagePath,
() => unregisterRepo(entry.path), entry.path), matching `gitnexus remove`
and `gitnexus clean`, so the unregister and the pointer removal run under
the slot lock; non-shared storage is still removed, then unregistered.
The later standalone unregister is gone. An IndexLockTimeoutError answers
409 and leaves the entry registered; any other failure propagates to the
handler's 500, also with the entry kept so the delete can be retried,
instead of unregistering over leftover index files.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 07:50:19 +00:00
..
fixtures fix(swift): resolve nested constructors in extensions (#3308) 2026-09-19 09:46:53 +01:00
helpers refactor(analyze): move detected-branch sanitization off CLI config (#3325) 2026-09-18 11:03:24 +01:00
integration fix(storage): fail safe on unreadable slot metadata during reclaim (#3374) 2026-09-25 07:42:11 +00:00
unit fix(server): unregister under the slot lock and answer 409 on DELETE /api/repo (#3374) 2026-09-25 07:50:19 +00:00
utils feat(storage): add configurable index storage and content retention tiers (#3060) 2026-09-12 20:31:55 +00:00