Commit graph

17 commits

Author SHA1 Message Date
a72dae1a60 fix: Fortschrittsbalken zeigt jetzt korrekte Gesamtzahl
Progress-Bar basiert nun auf der Anzahl geplanter Umbenennungen
statt auf der Gesamtzahl aller Einträge.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 04:36:31 +01:00
bd82fd7b30 fix: Cargo.lock tracken, verbose durchreichen, Config-Fehler melden, Platzhalter-Kollision beheben
- Cargo.lock aus .gitignore entfernt (Rust-Konvention: für Binaries committen)
- verbose-Parameter in clean_filename() wird jetzt korrekt von args.verbose
  durchgereicht statt hardcoded false
- Config::load() gibt bei Parse-Fehlern eine Warnung aus statt den Fehler
  still zu schlucken
- Platzhalter für C++/C# von CPLUSPLUS/CSHARP zu NTUxCPLUSPLUSx/NTUxCSHARPx
  geändert um Kollisionen mit echten Dateinamen zu vermeiden

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 04:32:59 +01:00
de9bb4fd03 refactor: Code-Qualität und Usability verbessern
- Ungenutzte Dependencies entfernt (itertools, thiserror)
- 560 Build-Artefakte (target/) aus Git-Tracking entfernt
- NO_COLOR Umgebungsvariable unterstützen (https://no-color.org/)
- if let Ok/Err durch idiomatisches match ersetzt
- Fehlermeldung bei Aufruf ohne Pfade hinzugefügt
- Sequence::default() zu Sequence::standard() umbenannt
  um Verwechslung mit dem Rust Default-Trait zu vermeiden

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 04:26:47 +01:00
b08ff38a49 perf: Parallelverarbeitung wiederherstellen (2.4-2.9x Speedup)
rayon's par_iter() auf indexierten Collections bewahrt die Reihenfolge,
daher war die Entfernung im vorherigen Commit unnötig. Mapping-Logik
in Closure extrahiert um Code-Duplizierung zu vermeiden.

Benchmark (dry-run, quiet):
  5.050 Einträge: 48ms seq → 20ms par (2.4x)
  20.050 Einträge: 186ms seq → 63ms par (2.9x)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 04:21:31 +01:00
ad44139e21 fix: Race Condition bei paralleler Umbenennung, Clippy/Deprecation-Warnings und Formatierung
- Parallele Berechnung (par_iter) entfernt, da sie die tiefenbasierte
  Sortierung zerstörte und Parent-Verzeichnisse vor ihren Kindern
  umbenannt werden konnten
- Duplizierten Code zwischen parallelem und sequentiellem Pfad entfernt
- Clippy-Warning behoben: collapsible str::replace in sanitizer.rs
- Deprecation-Warning behoben: #[allow(deprecated)] für cargo_bin Import
- cargo fmt angewendet

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 04:08:23 +01:00
b84dd70f80 feat: Add --max-depth option and safe symlink handling (v1.2.0)
## Neue Features

- **--max-depth N**: Begrenzt Rekursionstiefe auf N Ebenen (erfordert -r)
  - Nützlich für sehr tiefe Verzeichnisbäume (z.B. node_modules)
  - Verhindert unnötige Traversierung tiefer Strukturen

- **Explizites Symlink-Handling**:
  - Standard: Symlinks werden komplett übersprungen (sicher)
  - Mit --special: Nur Symlink-Namen werden bereinigt, Ziel bleibt unangetastet
  - follow_links(false) explizit gesetzt zur Vermeidung von Endlosschleifen
  - Verhindert unbeabsichtigte Änderungen außerhalb des Zielverzeichnisses

- **Verbose Symlink-Logging**: Zeigt mit -v welche Symlinks übersprungen werden

## Tests

- 5 neue Integration-Tests hinzugefügt:
  - test_max_depth_option
  - test_max_depth_requires_recursive
  - test_symlinks_default_behavior (Unix only)
  - test_symlinks_with_special_flag (Unix only)
  - test_symlinks_not_followed (Unix only)

- Alle 30 Tests bestehen (25 bestehende + 5 neue)

## Dokumentation

- README.md: Neue Beispiele und "Symlink Behavior" Sektion
- CHANGELOG.md: v1.2.0 Eintrag mit allen Änderungen
- man/ntu.1: --max-depth Option und SYMLINK BEHAVIOR Sektion
- CLAUDE.md: Aktualisierte Code-Architektur Dokumentation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 13:39:41 +01:00
2ec4d12d6c Implement sequences feature v1.1.0
- Add -s/--sequence option to select transformation sequences
- Add -L flag to list all available sequences
- Implement 5 hardcoded sequences: default, lower, upper, minimal, utf-8
- Refactor clean_filename() to support sequence-based transformations
- Update all tests to pass sequence parameter (25 tests passing)
- Add 8 new integration tests for sequence functionality
- Update documentation (README, CHANGELOG, manpage)
- Update shell completions (bash, zsh, fish)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 18:38:23 +01:00
d78e318d8a neue Optionen (-r, Installskript) installiert 2026-02-10 15:38:53 +01:00
0f61e0fbd9 Implementiere farbige Terminal-Ausgabe
- Fügt colored Crate hinzu für bessere visuelle Unterscheidung
- Grün: erfolgreiche Umbenennungen
- Gelb: Dry-run Modus
- Rot: Fehlermeldungen
- Cyan/Bold: Statistik-Zusammenfassung
- Neues --no-color Flag zum Deaktivieren
- Automatische Farberkennung via is_terminal()
- Behebt ungenutzten warn Import
- Aktualisiert Integration-Tests auf neues cargo_bin! Makro

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 13:39:30 +01:00
f4006ba99d release: Version 0.2.0 mit Statistiken und CHANGELOG
- Version erhöht von 0.1.0 auf 0.2.0
- CHANGELOG.md hinzugefügt mit vollständiger Feature-Liste
- Statistiken am Ende: Verarbeitete/geplante/umbenannte Dateien
- Fehler-Zähler für übersprungene/fehlgeschlagene Umbenennungen
- Kommentar-Klarstellung in sanitizer.rs
- Bessere Fehlerbehandlung mit detaillierten Error-Messages

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 10:30:18 +01:00
60a56ec021 feat: Schreibrechte-Prüfung vor Umbenennung
- is_safe_rename() prüft jetzt Schreibrechte im Parent-Verzeichnis
- Prüfung für Quell- und Ziel-Verzeichnis
- Unix-spezifisch: Nutzt PermissionsExt für mode-Check
- Bessere Fehlermeldungen bei fehlenden Schreibrechten
- Verhindert sinnlose Rename-Versuche, die ohnehin fehlschlagen würden

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 10:26:24 +01:00
ca49404dfa feat: Parallele Verarbeitung mit rayon bei vielen Dateien
- Bei >= 100 Dateien wird rayon für parallele Berechnung genutzt
- clean_filename() wird parallel ausgeführt (CPU-intensive Operation)
- Tatsächliche Umbenennung bleibt sequenziell (I/O-bound, Race-Conditions vermeiden)
- Bei < 100 Dateien sequenziell (Overhead vermeiden)
- RenameOperation-Struct für geplante Umbenennungen

Performance-Gewinn bei großen Verzeichnisbäumen mit vielen Dateien.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 10:24:50 +01:00
6c7470e7a6 feat: Bessere Erkennung von Doppel-Extensions
- .tar.gz, .tar.bz2, .tar.xz, .tar.zst, .tar.lz, .tar.Z
  werden jetzt korrekt als Einheit behandelt
- "my archive.tar.gz" → "my_archive.tar.gz" (nicht mehr "my_archive.gz")
- Neue Hilfsfunktion split_filename()
- Tests für Doppel-Extensions hinzugefügt

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 10:13:47 +01:00
3241b40d01 test: Unit-Tests für clean_filename() hinzugefügt
- 8 Tests für verschiedene Edge-Cases:
  - Basis-Funktionalität (Spaces, Klammern)
  - Versteckte Dateien (.gitignore, .my config)
  - Umlaute (Müller → Mueller)
  - Extensions (.tar.gz, mehrfache Punkte)
  - Spezial-Identifier (C++, C#)
  - Apostrophe (O'Reilly → OReilly)
  - Leere Dateinamen nach Bereinigung
  - Dateien die keine Änderung benötigen

Alle Tests bestehen ✓

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 10:12:40 +01:00
dbb3a092a6 feat: CLI-Verbesserungen nach detox-Analyse
- --dry-run als primäre Option (--no-changes als deprecated alias)
- --special für Symlinks und Special Files
- Smart Default-Excludes: .git, .svn, node_modules, .cache, __pycache__
  werden automatisch ignoriert (ähnlich wie detox)
- Alle Änderungen rückwärtskompatibel

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 10:11:59 +01:00
df4421af2f fix: Versteckte Dateien (.gitignore etc.) werden nicht mehr fälschlicherweise umbenannt
- Bugfix: Dateien mit führendem Punkt wurden zu "unnamed.xxx" umbenannt,
  da der Punkt fälschlicherweise als Extension-Trenner interpretiert wurde.
  Jetzt wird der führende Punkt als hidden_prefix separat behandelt.
- Alle Clippy-Warnungen behoben (redundanter Import, kollabierbare if-Blöcke,
  manuelle Range-Checks)
- CLAUDE.md für Projekt-Dokumentation hinzugefügt

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-10 09:07:30 +01:00
6df315115b Initial commit 2025-03-18 03:05:18 +01:00