"""Self-management commands for bin.""" import subprocess from pathlib import Path import click def _get_project_root() -> Path: """Get mytoolkit project root.""" # This file is at bin/commands/self_mgmt.py return Path(__file__).parent.parent.parent @click.command(name="update") def update_cmd(): """Update mytoolkit from the local repository.""" root = _get_project_root() click.secho("Updating mytoolkit...", fg="cyan") # Run make install result = subprocess.run( ["make", "install"], cwd=str(root), capture_output=True, text=True, ) if result.returncode == 0: click.secho("mytoolkit updated successfully.", fg="green") else: click.secho("Update failed:", fg="red", err=True) click.echo(result.stderr, err=True) raise click.Exit(1) @click.command(name="uninstall") def uninstall_cmd(): """Uninstall mytoolkit.""" root = _get_project_root() click.secho("Uninstalling mytoolkit...", fg="cyan") result = subprocess.run( ["make", "uninstall"], cwd=str(root), capture_output=True, text=True, ) if result.returncode == 0: click.secho("mytoolkit uninstalled.", fg="green") else: click.secho("Uninstall failed:", fg="red", err=True) click.echo(result.stderr, err=True) raise click.Exit(1) # Backward compatibility: keep self_cmd group for any existing scripts @click.group(name="self") def self_cmd(): """Manage mytoolkit itself (legacy, use 'update'/'uninstall' directly).""" pass # Register commands in the group for backward compatibility self_cmd.add_command(update_cmd, name="update") self_cmd.add_command(uninstall_cmd, name="uninstall")