diff --git a/CHANGELOG.md b/CHANGELOG.md index b4eb442..6d1376d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,16 @@ -# CHANGELOG +# CHANGELOG - treeScannerASCII + +- **2025-04-30 Commit v0.3.0** + + - **Geändert:** + - [x] Fortschrittsanzeige beim Scan: Ausgabe alle 5 Sekunden via Timer (TreeScanner.scan_directory) + - [x] Fehlerbehandlung bei ungültigem root_path verbessert (CLI) + - [x] Unterstützung für Ignorierliste von Verzeichnissen (`--ignore`, `-x`), rekursiv wirksam + + - **Hinzugefügt:** + - [x] Unterstützung für Paket-Ausführung via `python -m treeScannerASCII` + - Leeres `__init__.py` beibehalten + - `__main__.py` mit Fallback-Import (`relative` + `direct`) implementiert - **2025-04-27 - Commit v0.2.1** diff --git a/README.md b/README.md index 0a7a2dd..2c0b9d8 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,8 @@ python scanner.py [root_path] [-n N] [-d DEPTH] [--no-align-comments] [-l {de,en | `-d`, `--max-depth` | Maximale Tiefe der Rekursion; unbegrenzt, wenn nicht gesetzt. | | `--no-align-comments` | Deaktiviert die Ausrichtung der Kommentar-Platzhalter am Zeilenende. | | `-l`, `--language` | Sprache der Abschlussmeldung (`de` für Deutsch, `en` für Englisch; Default: `de`). | +| `-x`, `--ignore` | Ignoriert angegebene Verzeichnisse rekursiv (z. B. `.git`, `__pycache__`). Mehrfach möglich. | +| `-o`, `--output` | Zielpfad der Ausgabedatei (z. B. `tree.txt` oder `logs/struktur.txt`) | | `-h`, `--help` | Zeigt diese Hilfe an und beendet das Programm. | **Ausgabe:** @@ -70,6 +72,8 @@ print(output) | `max_depth: Optional[int]` | Ganzzahl oder None | Maximale Rekursionstiefe; `None` = unbegrenzt | | `align_comments: bool` | Bool | Kommentare am Zeilenende ausrichten (Default: `True`) | | `language: str` | String | Sprache der Zusammenfassung (`de` oder `en`) (Default: `de`) | +| `output_file: str` | String | Dateiname und Pfad der Ausgabe-Datei (Default: `tree.txt`) | +| `ignored_dirs: List[str]` | Liste von Strings | Verzeichnisse, die rekursiv ignoriert werden sollen (z. B. `.git`) | ## 📄 Beispielausgabe (tree.txt) @@ -94,13 +98,14 @@ print(output) - Mehrsprachige Abschlussmeldung (Deutsch, Englisch) - Ausgabe als Textdatei (`tree.txt`) - Saubere Google-Style Docstrings für IDE-Kompatibilität +- Fortschrittsanzeige bei großen Scans (alle 5 Sekunden automatische Statusmeldung) +- Ignorieren beliebiger Verzeichnisse rekursiv via `--ignore` +- Konfigurierbarer Ausgabe-Dateiname/-Pfad via `--output` - Modularer Aufbau für spätere Erweiterungen ## 🛡️ Geplante Erweiterungen -- Bessere Fehlerbehandlung bei ungültigem Pfad (anstatt Absturz) - Farbliche Ausgabe der Baumstruktur in der Konsole (optional) -- Konfigurierbare Ausgabe-Datei über CLI - Vorbereitung für Unicode-optimierte Konsolen ## 📄 Lizenz diff --git a/VERSION b/VERSION index f477849..0d91a54 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.2.2 \ No newline at end of file +0.3.0 diff --git a/__init__.py b/__init__.py index e69de29..710a634 100644 --- a/__init__.py +++ b/__init__.py @@ -0,0 +1,2 @@ +# __init__.py +# (leer) Kennzeichnet das Verzeichnis als Python-Paket \ No newline at end of file diff --git a/__main__.py b/__main__.py index e69de29..596062c 100644 --- a/__main__.py +++ b/__main__.py @@ -0,0 +1,12 @@ +# __main__.py +# (leer) Optional: erlaubt spätere Ausführung mit `python -m treescannerASCII` + +try: + # Für Paket-Ausführung mit `python -m treeScannerASCII` + from .scanner import main +except ImportError: + # Für direkte Ausführung mit `python scanner.py` + from scanner import main + +if __name__ == "__main__": + main() diff --git a/scanner.py b/scanner.py index 55cd5e7..23a2e12 100644 --- a/scanner.py +++ b/scanner.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import os import argparse +import time from typing import Optional, List class TreeScannerConfig: @@ -49,6 +50,7 @@ class TreeScanner: Args: config (TreeScannerConfig): Konfiguration für den Scanner. """ + self.last_output = time.time() self.config = config self.folder_count = 0 self.file_count = 0 @@ -99,6 +101,10 @@ class TreeScanner: for idx, name in enumerate(combined): if not name.startswith("= 5: + print(f"[Info] {self.folder_count + self.file_count} Einträge gescannt...", flush=True) + self.last_output = time.time() + connector = "├── " if idx < len(combined) - 1 else "└── " lines.append(f"{prefix}{connector}{self.config.file_icon} {name}")