diff --git a/src/repocat/cli/move.py b/src/repocat/cli/move.py index 652cdb9..b50a173 100644 --- a/src/repocat/cli/move.py +++ b/src/repocat/cli/move.py @@ -1,10 +1,9 @@ from typer import Typer, Argument from rich.console import Console -from pathlib import Path -import shutil import typer from repocat.config import load_config +from repocat.models.catalog import RepoCatalogState app = Typer() console = Console() @@ -12,20 +11,16 @@ console = Console() def complete_source_repo(incomplete: str): config = load_config() - base = config.base_dir + catalog = RepoCatalogState.from_config(config) results = [] - for cat in config.categories: - if cat.is_archive: + for cat in catalog.categories: + if cat.config.is_archive: continue - cat_path = base / cat.subdir - if not cat_path.exists(): - continue - for item in cat_path.iterdir(): - if item.is_dir(): - full_name = f"{cat.name}/{item.name}" - if full_name.startswith(incomplete): - results.append(full_name) + for repo in cat.repos: + full_name = f"{cat.config.name}/{repo.name}" + if full_name.startswith(incomplete): + results.append(full_name) return sorted(results) @@ -43,39 +38,35 @@ def move_command( Verschiebt ein Repository in eine andere Kategorie. """ config = load_config() - base = config.base_dir + catalog = RepoCatalogState.from_config(config) - # Quelle aufspalten in Kategorie und Repo try: source_cat_name, repo_name = source.split("/", 1) except ValueError: console.print("[red]Ungültiges Format für Quelle. Bitte / angeben.[/]") raise typer.Exit(1) - source_cat = next((c for c in config.categories if c.name == source_cat_name), None) + source_cat = catalog.get_category(source_cat_name) if not source_cat: console.print(f"[red]Unbekannte Quellkategorie:[/] {source_cat_name}") raise typer.Exit(1) - target_cat = next((c for c in config.categories if c.name == target), None) + target_cat = catalog.get_category(target) if not target_cat: console.print(f"[red]Ungültige Zielkategorie:[/] {target}") raise typer.Exit(1) - source_path = base / source_cat.subdir / repo_name - destination_path = base / target_cat.subdir / repo_name - - if not source_path.exists(): - console.print(f"[red]Quell-Repository existiert nicht:[/] {source_path}") - raise typer.Exit(1) - - if destination_path.exists(): - console.print(f"[red]Zielordner existiert bereits:[/] {destination_path}") + repo = source_cat.find_repo(repo_name) + if not repo: + console.print(f"[red]Repository '{repo_name}' nicht gefunden in Kategorie '{source_cat_name}'.[/]") raise typer.Exit(1) try: - shutil.move(str(source_path), str(destination_path)) - console.print(f"[green]✓ Erfolgreich verschoben:[/] {source_cat.name}/{repo_name} → {target}") + repo.move_to(target_cat.path) + console.print(f"[green]✓ Erfolgreich verschoben:[/] {source_cat_name}/{repo_name} → {target}") + except FileExistsError as e: + console.print(f"[red]{e}[/]") + raise typer.Exit(1) except Exception as e: console.print(f"[red]Fehler beim Verschieben:[/] {e}") - raise typer.Exit(1) + raise typer.Exit(1) \ No newline at end of file