Files
myagents/bin/commands/update.py
T
Zhengshou Lai b580eecc43 fix: expanduser in project_root, remove redundant cwd, add tests
- get_myclaude_project_root() now expands ~ in MYCLAUDE_PROJECT_ROOT
  (was resolving to ./~/path instead of $HOME/path)
- Extract hardcoded 16/8 depth limits as _MAX_WALK_DEPTH / _MAX_SOURCE_DEPTH
- Remove redundant cwd= from _run_pip_editable (already specified via -e)
- Add test_cwd_invalid_directory and test_env_var_expands_tilde
- Remove incorrect test_extra_args_forwarded (click.Group does not
  support forwarding arbitrary args; ctx.args is always empty)
2026-05-27 11:23:14 +08:00

57 lines
1.5 KiB
Python

"""Reinstall myclaude from the local repo."""
import subprocess
import sys
from pathlib import Path
import click
from rich.console import Console
from bin.project_root import get_myclaude_project_root
console = Console()
stderr_console = Console(stderr=True)
def _run_make_install(root: Path) -> int:
return subprocess.run(
["make", "install"],
cwd=str(root),
check=False,
).returncode
def _run_pip_editable(root: Path) -> int:
cmd = [sys.executable, "-m", "pip", "install", "-e", str(root)]
return subprocess.run(cmd, check=False).returncode
@click.command("update")
def update_cmd() -> None:
"""Reinstall myclaude from this repository (make install, or pip install -e)."""
root = get_myclaude_project_root()
fallback = Path.home() / ".myclaude"
if root == fallback:
stderr_console.print(
"[red]Not inside myclaude repo.[/red] Set [cyan]MYCLAUDE_PROJECT_ROOT[/cyan] "
"or run from the clone.",
)
raise SystemExit(1)
console.print("[bold cyan]Updating myclaude…[/bold cyan]")
makefile = root / "Makefile"
if makefile.is_file():
rc = _run_make_install(root)
if rc != 0:
console.print(
"[yellow]make install failed, trying pip -e…[/yellow]"
)
rc = _run_pip_editable(root)
else:
rc = _run_pip_editable(root)
if rc != 0:
stderr_console.print("[red]Update failed.[/red]")
raise SystemExit(rc)
console.print("[green]myclaude updated.[/green]")