diff --git a/Makefile b/Makefile index d8ab27f..e3d9140 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,9 @@ ROOT_DIR := $(shell pwd) COMP_DIR := $(HOME)/.local/bin/completions PYTHON ?= python3 +# 手动安装的文件清单(与 bin/commands/self_mgmt.py 中的 _MANUAL_FILES 保持同步) +MANUAL_FILES := $(COMP_DIR)/_mytoolkit $(COMP_DIR)/mytoolkit.bash + .PHONY: help install uninstall help: @@ -27,5 +30,10 @@ install: uninstall: $(PYTHON) -m pip uninstall mytoolkit -y - rm -f "$(COMP_DIR)/_mytoolkit" "$(COMP_DIR)/mytoolkit.bash" - @echo "Uninstalled mytoolkit and removed completions" + @for f in $(MANUAL_FILES); do \ + if [ -e "$$f" ] || [ -L "$$f" ]; then \ + rm -f "$$f"; \ + echo "Removed $$f"; \ + fi; \ + done + @echo "Uninstalled mytoolkit and cleaned up manual files" diff --git a/bin/commands/self_mgmt.py b/bin/commands/self_mgmt.py index 39dd7e7..4fde17b 100644 --- a/bin/commands/self_mgmt.py +++ b/bin/commands/self_mgmt.py @@ -9,6 +9,15 @@ from pathlib import Path import click +# 手动安装的文件清单(pip 管理范围外,uninstall 时需要额外清理) +_MANUAL_FILES: dict[str, list[Path]] = { + "completions": [ + Path.home() / ".local" / "bin" / "completions" / "_mytoolkit", + Path.home() / ".local" / "bin" / "completions" / "mytoolkit.bash", + ], +} + + def _get_project_root() -> Path: """Get mytoolkit project root from source tree.""" return Path(__file__).parent.parent.parent @@ -78,11 +87,15 @@ def _uninstall() -> None: check=False, ) - comp_dir = Path.home() / ".local" / "bin" / "completions" - for f in (comp_dir / "_mytoolkit", comp_dir / "mytoolkit.bash"): - if f.exists() or f.is_symlink(): - f.unlink() - click.secho(f"Removed {f}", fg="green") + removed = 0 + for paths in _MANUAL_FILES.values(): + for f in paths: + if f.exists() or f.is_symlink(): + f.unlink() + click.secho(f"Removed {f}", fg="green") + removed += 1 + if removed == 0: + click.secho("No manual files to clean up.", fg="cyan") @click.command(name="update")