Commit Graph

25 Commits

Author SHA1 Message Date
martin 9f401e48e9 fix: Trockenlauf-Zählwerte korrigieren und Fehlerbehandlung verbessern
- count_changes_in_rsync_output: Regulärer Ausdruck für gelöschte Dateien korrigiert (wildcard-Escaping)
- Doppel-Checks entfernt, Fehlerausgaben standardisiert
- Dry-Run-Output-Parsing zu gemeinsamen Funktionen verschoben
- CLAUDE.md mit präziseren Anforderungen an Fehlerbehandlung aktualisiert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 17:28:11 +02:00
martin 98722536f1 Merge pull request 'fix: GUI-Dialogauswahl und Konsolen-Fallback in darktable_wrapper' (#7) from fix/script-gui-console-mode into main 2026-04-21 16:01:16 +02:00
martin 50e3b46cc9 fix: GUI-Dialogauswahl und Konsolen-Fallback in darktable_wrapper
- darktable_wrapper.sh: DIALOG_BIN-Prüfung für fehlende GUI-Tools
- darktable_common.sh: Verbesserte Fehlerbehandlung bei Dialog-Auswahl

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 15:55:32 +02:00
martin 41f2ce85cc docs: CLAUDE.md mit Projektarchitektur und Konventionen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 07:13:08 +02:00
martin 0dd2464108 Merge pull request 'Trockenlauf als Standard, Backups vor Download, Security-Verbesserungen' (#6) from feat/sync-delete-with-backup into main
feat: Lösch-Synchronisation mit lokalem Backup und Bereinigung
2026-04-21 07:12:11 +02:00
martin faa65dde2f feat: Lösch-Synchronisation mit lokalem Backup und Bereinigung
Gelöschte Dateien werden beim Download ins Backup-Verzeichnis verschoben
(${LOCAL_PHOTO_DIR}-bak, ${LOCAL_DARKTABLE_DB_DIR}-bak) statt permanent
gelöscht. Upload verwendet --delete ohne Backup. Backups älter als 2 Jahre
werden automatisch bereinigt. Safeguard verhindert --delete bei leerem
Quellverzeichnis. validate_path prüft jetzt auch lokale Pfade.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 07:04:06 +02:00
martin d714f95cb7 refactor: Grep-Optimierung im Trockenlauf-Ergebnis
Reduziere Dateizugriffe von 12 auf 2 durch Pufferung der Log-Inhalte.
Liest Upload- und Download-Logs jeweils einmal, statt sie 6x zu lesen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 16:37:47 +02:00
martin 688f93cfb9 test: Security-Tests für Dry-Run-Funktionen ergänzt
12 neue Tests prüfen: classify_filetype gegen Injection, format_rsync_details
mit manipulierten Logs, RSYNC_DRY_FLAG-Isolation, Trockenlauf schreibt keine
Tokens/Versionsdateien, DRY_RUN_SKIP_CONFIRM-Grenzen, unbekannte Argumente.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 16:33:53 +02:00
martin c05f323605 feat: Trockenlauf als Standard-Aufruf, --execute/-e für echten Sync
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>
2026-04-20 16:24:31 +02:00
martin 0c5774f695 install.sh: interaktive Abfragen bei Installation verbessert
- .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>
2026-04-20 12:47:10 +02:00
martin bc63739399 Merge pull request 'Robustheit: Error-Handling, Validation und Strukturverbesserungen' (#3) from feat/improve-sync-robustness into main 2026-04-19 21:05:41 +02:00
martin c4a9b4a33d Robustheit: Error-Handling, Validation und Strukturverbesserungen
- Neue darktable_common.sh mit gemeinsamen Funktionen (Logging, Validierung, Lock-Management)
- Verbesserte Fehlerbehandlung und aussagekräftige Error-Messages
- Explizite Validierung von SSH-Schlüssel, Pfaden und Konfiguration beim Start
- Sperrmechanismus zur Verhinderung paralleler Sync-Instanzen
- Bessere Strukturierung des Sync-Prozesses mit sauberer Fehlertoleranz

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 21:05:14 +02:00
martin e5d87bd1cb Merge pull request 'Refaktorierung: Common-Library mit generischen Funktionen' (#2) from refactor/darktable-common-extraction into main 2026-04-19 20:36:58 +02:00
martin 6fd8a8c308 Refaktorierung: Common-Library mit generischen Funktionen
- Neue `darktable_common.sh` mit wiederverwendbaren Shell-Funktionen (Locking, Logging, Validierung)
- `darktable_sync.sh` nutzt jetzt Common-Library statt eingebettete Logik
- `darktable_wrapper.sh` vereinfacht durch Nutzung von Common-Funktionen
- Eliminiert Code-Duplikation zwischen Sync und Wrapper
- Verbessert Wartbarkeit und Testbarkeit

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 20:35:56 +02:00
martin 0cd9679767 Merge pull request 'Robuste Darktable-Synchronisation: sequenzieller Ablauf, Sicherheitshaertung' (#1) from feature/robust-sync into main
Robuste Darktable-Synchronisation: sequenzieller Ablauf, Sicherheitshaertung
2026-04-19 20:00:32 +02:00
martin 92a5d50082 Sicherheitshaertung: Injection-Schutz, atomares Locking, Pfad-Validierung
- load_config blockiert Shell-Operatoren (;|&`) in .env-Werten
- validate_path prueft Sonderzeichen und Path-Traversal in Pfad-Variablen
- validate_config prüft DARKTABLE_BIN-basename und ruft validate_path auf
- Lockdir-Trap erst nach erfolgreicher Lock-Akquisition registriert
  (verhindert dass externer Lockdir bei gescheitertem Lock entfernt wird)
- uninstall.sh nutzt rmdir statt rm -rf fuer Lockdir
- security.bats mit 10 Tests fuer alle Sicherheitsanforderungen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 19:57:39 +02:00
martin 46664ab3b6 Code-Vereinfachung: Redundanzen entfernen und Wiederverwendung verbessern
- log() Funktion in darktable_common.sh ausgelagert (war doppelt vorhanden)
- ssh_server() Hilfsfunktion für wiederholte SSH-Aufrufe mit konsistenten Optionen
- ssh_server() nutzen statt inline SSH-Befehle in darktable_sync.sh und darktable_wrapper.sh
- Reduzierung von SSH-Optionswiederbholungen (ConnectTimeout, BatchMode, Port)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 19:45:11 +02:00
martin 6a6ce52cf9 Robuste Darktable-Synchronisation: sequenzieller Ablauf, Versions- und Concurrent-Schutz
- Race Condition behoben: Pre-Sync wird vollstaendig abgewartet bevor Darktable startet
- Post-Sync nach Schliessen von Darktable eingefuehrt (bisher fehlend)
- .env aus festem Pfad ~/.config/darktable-sync/.env geladen (nicht mehr relativ)
- Server-Erreichbarkeit per SSH statt ping (Firewall-sicher)
- Darktable-Versionscheck (Major.Minor) vor Download mit Abbruch bei Konflikt
- DB-Backup vor jedem Download (library.db.bak, data.db.bak)
- sync_pending-Marker bei Offline/Fehler, Hinweis beim naechsten Start
- darktable.active-Marker auf Server fuer Concurrent-Erkennung
- Lock-Dateien vom Sync ausgeschlossen
- systemd-Timer entfernt, Service bleibt als manueller Trigger
- Gemeinsame Hilfsfunktionen in darktable_common.sh extrahiert
- 20 BATS-Tests mit vollstaendigem Stub-System ohne GUI-Dialoge

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 19:41:26 +02:00
martin 3bdd26ed81 First step into separated scripts 2026-01-03 10:47:27 +01:00
martin ced8ac8dc0 Add execution lock 2025-11-18 16:06:50 +01:00
martin 8d75bbd5f8 Disable background synchronisation 2025-11-18 13:40:29 +01:00
martin b933b1900d Ensure that only newer files will be synchronized, no matter which size they have 2025-11-18 12:20:06 +01:00
martin 3a6c4e28b3 Rename NAS to server to make it more general 2025-06-09 16:39:19 +02:00
martin d7ca1fa2a8 First complete version 2025-06-09 16:26:18 +02:00
MaTr74 6eb94d9077 Initial commit 2025-06-09 15:59:37 +02:00