(self, name: str, force: bool = False, complete_task: bool = False)
| 392 | return "Error: Timeout (300s)" |
| 393 | |
| 394 | def remove(self, name: str, force: bool = False, complete_task: bool = False) -> str: |
| 395 | wt = self._find(name) |
| 396 | if not wt: |
| 397 | return f"Error: Unknown worktree '{name}'" |
| 398 | |
| 399 | self.events.emit( |
| 400 | "worktree.remove.before", |
| 401 | task={"id": wt.get("task_id")} if wt.get("task_id") is not None else {}, |
| 402 | worktree={"name": name, "path": wt.get("path")}, |
| 403 | ) |
| 404 | try: |
| 405 | args = ["worktree", "remove"] |
| 406 | if force: |
| 407 | args.append("--force") |
| 408 | args.append(wt["path"]) |
| 409 | self._run_git(args) |
| 410 | |
| 411 | if complete_task and wt.get("task_id") is not None: |
| 412 | task_id = wt["task_id"] |
| 413 | before = json.loads(self.tasks.get(task_id)) |
| 414 | self.tasks.update(task_id, status="completed") |
| 415 | self.tasks.unbind_worktree(task_id) |
| 416 | self.events.emit( |
| 417 | "task.completed", |
| 418 | task={ |
| 419 | "id": task_id, |
| 420 | "subject": before.get("subject", ""), |
| 421 | "status": "completed", |
| 422 | }, |
| 423 | worktree={"name": name}, |
| 424 | ) |
| 425 | |
| 426 | idx = self._load_index() |
| 427 | for item in idx.get("worktrees", []): |
| 428 | if item.get("name") == name: |
| 429 | item["status"] = "removed" |
| 430 | item["removed_at"] = time.time() |
| 431 | self._save_index(idx) |
| 432 | |
| 433 | self.events.emit( |
| 434 | "worktree.remove.after", |
| 435 | task={"id": wt.get("task_id")} if wt.get("task_id") is not None else {}, |
| 436 | worktree={"name": name, "path": wt.get("path"), "status": "removed"}, |
| 437 | ) |
| 438 | return f"Removed worktree '{name}'" |
| 439 | except Exception as e: |
| 440 | self.events.emit( |
| 441 | "worktree.remove.failed", |
| 442 | task={"id": wt.get("task_id")} if wt.get("task_id") is not None else {}, |
| 443 | worktree={"name": name, "path": wt.get("path")}, |
| 444 | error=str(e), |
| 445 | ) |
| 446 | raise |
| 447 | |
| 448 | def keep(self, name: str) -> str: |
| 449 | wt = self._find(name) |
no test coverage detected