Bug: Git-Operationen nicht idempotent — Retry schlägt fehl #46

Closed
opened 2026-03-30 19:55:57 +00:00 by David · 1 comment
Collaborator

Beschreibung

Wenn die Branch-Erstellung in der Preparation unterbrochen wird, schlägt ein Retry fehl weil der Branch bereits existiert aber der Checkout nicht abgeschlossen wurde.

Hintergrund

repo_analyzer.py:187 löscht den Branch mit -D und erstellt ihn neu. Wenn zwischen dem Löschen und dem Erstellen ein Fehler auftritt (z.B. Disk full, Git-Lock), ist der Branch in einem inkonsistenten Zustand. Der nächste Retry findet einen halb-erstellten Branch.

Akzeptanzkriterien

  • Branch-Erstellung ist idempotent: Wenn Branch existiert → Checkout statt Fehler
  • Wenn Branch existiert aber Commits hat: Warnung loggen, Branch zurücksetzen auf Default-Branch-HEAD
  • Cleanup stale Git-Locks (.git/index.lock) bei Retry
  • Test: Branch-Erstellung nach simuliertem Abbruch funktioniert

Technische Hinweise

  • Fix in: backend/services/repo_analyzer.py:187
  • Prüfung: git branch --list {branch_name} vor Erstellung
  • Lock-Cleanup: Path(repo_path / '.git' / 'index.lock').unlink(missing_ok=True)
  • Migration nötig: nein

Aufwand: S

## Beschreibung Wenn die Branch-Erstellung in der Preparation unterbrochen wird, schlägt ein Retry fehl weil der Branch bereits existiert aber der Checkout nicht abgeschlossen wurde. ## Hintergrund `repo_analyzer.py:187` löscht den Branch mit `-D` und erstellt ihn neu. Wenn zwischen dem Löschen und dem Erstellen ein Fehler auftritt (z.B. Disk full, Git-Lock), ist der Branch in einem inkonsistenten Zustand. Der nächste Retry findet einen halb-erstellten Branch. ## Akzeptanzkriterien - [ ] Branch-Erstellung ist idempotent: Wenn Branch existiert → Checkout statt Fehler - [ ] Wenn Branch existiert aber Commits hat: Warnung loggen, Branch zurücksetzen auf Default-Branch-HEAD - [ ] Cleanup stale Git-Locks (`.git/index.lock`) bei Retry - [ ] Test: Branch-Erstellung nach simuliertem Abbruch funktioniert ## Technische Hinweise - Fix in: `backend/services/repo_analyzer.py:187` - Prüfung: `git branch --list {branch_name}` vor Erstellung - Lock-Cleanup: `Path(repo_path / '.git' / 'index.lock').unlink(missing_ok=True)` - Migration nötig: nein ## Aufwand: S
Author
Collaborator

Superseded by #78 (Error Recovery & Cleanup). Git-Idempotenz ist dort als Finding #2 (Retry räumt Remote-Branch nicht auf) und Finding #11 (Fehlende Git Return-Code-Validierung) abgedeckt.

Superseded by #78 (Error Recovery & Cleanup). Git-Idempotenz ist dort als Finding #2 (Retry räumt Remote-Branch nicht auf) und Finding #11 (Fehlende Git Return-Code-Validierung) abgedeckt.
David closed this issue 2026-03-30 20:39:22 +00:00
Sign in to join this conversation.
No description provided.