Verwaiste Repo-Platzhalter blockieren keine Zuordnung mehr
Ein in Gitea geloeschtes Org-Repo liess sein unverknuepftes Projekt-Dokument liegen. Der Unique-Index auf repoFullName ignoriert Gross-/Kleinschreibung, darum scheiterte beim Zuweisen eines gleich benannten neuen Repos das Umbenennen des Projekts; alle Pushes landeten im Platzhalter ohne Ticket, also ohne Arbeitsblatt und ohne Push-Zeitmail (WEBklar/Schmacko-napf). - repoMove: vor dem Umbenennen ein unverknuepftes fremdes Dokument mit dem Zielnamen entfernen (verknuepfte bleiben unangetastet) - Webhook repository/deleted: unverknuepfte Platzhalter des geloeschten Repos entfernen, nur wenn Gitea das Repo wirklich nicht mehr kennt Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a64a996291
commit
6718018211
5 files changed
+132
-7
No files matched your search
@@ -16,7 +16,7 @@ import { ensureProjectTicket } from '../../services/ticketAdmin.js'
|
||||
import { invalidateProjectCache } from '../../services/projectInsights.js'
|
||||
import { withLocks } from '../../services/keyedLock.js'
|
||||
import { repoLockKey, currentRepoFullName } from '../../services/repoMove.js'
|
||||
import { handleRepositoryCreated } from '../../services/repoAssignJob.js'
|
||||
import { handleRepositoryCreated, handleRepositoryDeleted } from '../../services/repoAssignJob.js'
|
||||
|
||||
const router = Router()
|
||||
|
||||
@@ -48,9 +48,18 @@ router.post('/gitea', async (req, res) => {
|
||||
|
||||
const payload = req.body || {}
|
||||
|
||||
// Ereignis "repository": nur `created` wird verarbeitet (neues Repo -> Dokument + Zuordnungs-Mail),
|
||||
// alles andere (deleted, transfer, ...) wird mit 200 ignoriert. Der Push-Pfad bleibt unberuehrt.
|
||||
// Ereignis "repository": `created` (neues Repo -> Dokument + Zuordnungs-Mail) und `deleted`
|
||||
// (Platzhalter-Dokument entfernen), alles andere wird mit 200 ignoriert. Der Push-Pfad bleibt unberuehrt.
|
||||
if (req.get('X-Gitea-Event') === 'repository') {
|
||||
if (payload.action === 'deleted') {
|
||||
try {
|
||||
const r = await handleRepositoryDeleted(payload)
|
||||
return res.json({ ok: true, removed: r.removed })
|
||||
} catch (err) {
|
||||
console.error('[webhook] repository/deleted:', err)
|
||||
return res.status(500).json({ error: err.message || 'Webhook-Verarbeitung fehlgeschlagen' })
|
||||
}
|
||||
}
|
||||
if (payload.action !== 'created') return res.json({ ok: true, ignored: true })
|
||||
try {
|
||||
const r = await handleRepositoryCreated(payload)
|
||||
|
||||
Reference in new issue
Block a user