diff --git a/workspaces.py b/workspaces.py index 485029e..e3a53d2 100755 --- a/workspaces.py +++ b/workspaces.py @@ -1373,9 +1373,14 @@ def clean_workspace( f"Cleaning workspace [bold]{title or ws_dir.name}[/bold] (dir: {repo.name})" ) + run_cmd(["git", "fetch", "--all", "--prune"], cwd=repo) local_branches_merged = get_branches_merged(repo, remote=False) remote_branches_merged = get_branches_merged(repo, remote=True) + if len(local_branches_merged) == 0 and len(remote_branches_merged) == 0: + console.print("[green]No branches to delete.[/green]") + raise typer.Exit(0) + console.print( f"[green]Would delete {len(local_branches_merged)} local branches[/green]" ) @@ -1401,7 +1406,26 @@ def clean_workspace( run_cmd(cmd, cwd=repo) for b in remote_branches_merged: - cmd = ["git", "push", "origin", "--delete", b] + # b looks like "origin/feat/workspaces-tmux-support" + if "->" in b: + # safety: skip symbolic refs like "origin/HEAD -> origin/main" + continue + + try: + remote, branch = b.split("/", 1) + except ValueError: + # fallback: no slash? assume origin + raw name + remote, branch = "origin", b + + cmd = ["git", "push", remote, "--delete", branch] + + status, out, err = run_cmd(cmd, cwd=repo) + + if status != 0: + console.print(f"[red]Failed to delete {remote}/{branch}:[/red]\n{err}") + continue + + console.print("[green]Done.[/green]") def in_tmux() -> bool: