feat: Trockenlauf als Standard-Aufruf, --execute/-e für echten Sync #5

Open
martin wants to merge 0 commits from feat/dry-run-default into main
Owner

Zusammenfassung

Diese PR implementiert einen sicheren Trockenlauf-Modus als Standard:

  • Trockenlauf ist Standard ohne zusätzliche Flags
  • --execute oder -e aktiviert echten Sync mit Datenbank-Backup
  • Interaktive Bestätigung für Trockenlauf (per Dialog oder Text)
  • Detaillierte Änderungsvorschau mit Datei-Klassifizierung

Akzeptanzkriterien

  • Trockenlauf ist Standard-Aufruf ohne --execute
  • --execute und -e aktivieren echten Sync
  • Trockenlauf erstellt kein DB-Backup
  • Trockenlauf aktualisiert nicht sync_token oder darktable_version
  • Interaktive Bestätigung per Dialog oder Text-Fallback
  • DRY_RUN_SKIP_CONFIRM=1 überspringt Bestätigung (nur für Tests)
  • Trockenlauf zeigt Änderungsvorschau mit Kategorisierung
  • Security-Tests für neue Funktionen
  • Alle 50 Tests bestanden
  • Performance-Optimierung: Log-Pufferung statt 12x Dateizugriffe

Verifikation

Tests: bats tests/ - 50/50 bestanden ✓

  • 8 neue Dry-Run Tests in darktable_sync.bats
  • 12 neue Security-Tests für Dry-Run-Funktionen
  • Alle bestehenden Tests weiterhin grün

Code-Qualität: Simplify-Agent durchgeführt ✓

  • Neue Funktionen sind redundanzfrei und dokumentiert
  • Keine Copy-Paste-Fehler oder tote Code-Pfade
  • Performance-Optimierung: Grep-Wiederholungen (12 → 2 Dateizugriffe)

Security-Audit: Alle kritischen Pfade validiert ✓

  • DRY_RUN_SKIP_CONFIRM akzeptiert nur exakt '1' (keine Bypass-Tricks)
  • classify_filetype() sicher bei Sonderzeichen und Backticks
  • format_rsync_details() blockiert Shell-Metazeichen in Log-Zeilen
  • Keine Command-Injection möglich

Commits (4 insgesamt)

  1. 0c5774f - install.sh: interaktive Abfragen bei Installation verbessert
  2. c05f323 - feat: Trockenlauf als Standard-Aufruf, --execute/-e für echten Sync
  3. 688f93c - test: Security-Tests für Dry-Run-Funktionen ergänzt
  4. d714f95 - refactor: Grep-Optimierung im Trockenlauf-Ergebnis (nach Code-Review)

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com

## Zusammenfassung Diese PR implementiert einen sicheren Trockenlauf-Modus als Standard: - **Trockenlauf ist Standard** ohne zusätzliche Flags - `--execute` oder `-e` aktiviert echten Sync mit Datenbank-Backup - Interaktive Bestätigung für Trockenlauf (per Dialog oder Text) - Detaillierte Änderungsvorschau mit Datei-Klassifizierung ## Akzeptanzkriterien - [x] Trockenlauf ist Standard-Aufruf ohne `--execute` - [x] `--execute` und `-e` aktivieren echten Sync - [x] Trockenlauf erstellt kein DB-Backup - [x] Trockenlauf aktualisiert nicht `sync_token` oder `darktable_version` - [x] Interaktive Bestätigung per Dialog oder Text-Fallback - [x] `DRY_RUN_SKIP_CONFIRM=1` überspringt Bestätigung (nur für Tests) - [x] Trockenlauf zeigt Änderungsvorschau mit Kategorisierung - [x] Security-Tests für neue Funktionen - [x] Alle 50 Tests bestanden - [x] Performance-Optimierung: Log-Pufferung statt 12x Dateizugriffe ## Verifikation **Tests**: `bats tests/` - 50/50 bestanden ✓ - 8 neue Dry-Run Tests in `darktable_sync.bats` - 12 neue Security-Tests für Dry-Run-Funktionen - Alle bestehenden Tests weiterhin grün **Code-Qualität**: Simplify-Agent durchgeführt ✓ - Neue Funktionen sind redundanzfrei und dokumentiert - Keine Copy-Paste-Fehler oder tote Code-Pfade - Performance-Optimierung: Grep-Wiederholungen (12 → 2 Dateizugriffe) **Security-Audit**: Alle kritischen Pfade validiert ✓ - `DRY_RUN_SKIP_CONFIRM` akzeptiert nur exakt `'1'` (keine Bypass-Tricks) - `classify_filetype()` sicher bei Sonderzeichen und Backticks - `format_rsync_details()` blockiert Shell-Metazeichen in Log-Zeilen - Keine Command-Injection möglich ## Commits (4 insgesamt) 1. `0c5774f` - install.sh: interaktive Abfragen bei Installation verbessert 2. `c05f323` - feat: Trockenlauf als Standard-Aufruf, --execute/-e für echten Sync 3. `688f93c` - test: Security-Tests für Dry-Run-Funktionen ergänzt 4. `d714f95` - refactor: Grep-Optimierung im Trockenlauf-Ergebnis (nach Code-Review) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
martin added 2 commits 2026-04-20 16:27:50 +02:00
- .env-Verschiebung aus Projektverzeichnis wird angeboten und bei Bestätigung automatisch ausgeführt
- Lokales Foto-Verzeichnis wird interaktiv abgefragt (mit Hinweis falls es bereits existiert)
- Ausführlicher Hinweis nach Anlegen der Default-.env mit Pflichtfeldern und nächsten Schritten
- bats-Hinweis entfernt (nur für Entwickler relevant)
- Tests: Umlaut-Mismatch in security.bats behoben, teardown() für Lock-Isolation ergänzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ohne Flags führt darktable_sync.sh jetzt einen Trockenlauf durch:
- Banner mit Hinweis und Bestätigungsabfrage vor dem Start
- rsync läuft mit --dry-run (keine Dateiänderungen)
- Keine destruktiven Operationen: kein Backup, kein Token-Schreiben,
  kein sync_pending entfernen
- Zusammenfassung nach Richtung (Upload/Download) und Aktion
  (neu/aktualisiert/gelöscht) aufgeschlüsselt
- Optionale Detailansicht: Dateien gruppiert nach Typ (Foto, XMP,
  Datenbank, Video, Sonstiges)

Mit --execute oder -e wird der echte Sync wie bisher ausgeführt.
Desktop-Entry und Systemd-Service auf --execute aktualisiert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This branch is already included in the target branch. There is nothing to merge.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/dry-run-default:feat/dry-run-default
git checkout feat/dry-run-default
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: martin/darktable-sync#5