From 469845020002650e6395febcd0e71eb413430c29 Mon Sep 17 00:00:00 2001 From: "Waylon S. Walker" Date: Tue, 25 Nov 2025 18:51:09 -0600 Subject: [PATCH] make commit command with message flag --- workspaces.py | 103 ++++++++++++++++++++------------------------------ 1 file changed, 42 insertions(+), 61 deletions(-) diff --git a/workspaces.py b/workspaces.py index b9ce726..4545ec5 100755 --- a/workspaces.py +++ b/workspaces.py @@ -868,7 +868,6 @@ def choose_files_for_wip(repo_path: Path, changes: List[Tuple[str, str]]) -> Lis return selected_files - @app.command("wip") def wip_workspace( ctx: typer.Context, @@ -895,9 +894,48 @@ def wip_workspace( if not ws_dir.exists(): console.print(f"[red]Workspace '{ws_dir.name}' does not exist at {ws_dir}[/red]") raise typer.Exit(1) - title, _desc = read_workspace_readme(ws_dir) commit_message = f"wip: {title or ws_dir.name}" + commit_workspace(ctx, workspace, message=commit_message) + +@app.command("commit") +def commit_workspace( + ctx: typer.Context, + workspace: Optional[str] = typer.Option( + None, + "--workspace", + "-w", + help=( + "Workspace directory name to WIP-commit. " + "If omitted, uses the workspace containing the current directory." + ), + ), + message: Optional[str] = typer.Option( + None, + "--message", + "-m", + help="Commit message to use.", + ), +): + """ + For each repo in the workspace: + + - Show list of changed files. + - Ask whether to stage all, none, or pick some files. + - Stage chosen files. + """ + if not message: + console.print( + "[red]No commit message provided. Exiting.[/red]", + file=sys.stderr, + ) + raise typer.Exit(1) + _settings, _repos_dir, workspaces_dir = get_ctx_paths(ctx) + ws_dir = find_workspace_dir(workspaces_dir, workspace) + if not ws_dir.exists(): + console.print(f"[red]Workspace '{ws_dir.name}' does not exist at {ws_dir}[/red]") + raise typer.Exit(1) + title, _desc = read_workspace_readme(ws_dir) worktrees: List[Path] = [] for child in sorted(p for p in ws_dir.iterdir() if p.is_dir()): @@ -938,14 +976,14 @@ def wip_workspace( continue # Commit - code, _out, err = run_cmd(["git", "commit", "-m", commit_message], cwd=wt) + code, _out, err = run_cmd(["git", "commit", "-m", message], cwd=wt) if code != 0: console.print( f"[red]Failed to commit in {wt.name}:[/red]\n{err}" ) else: console.print( - f" [green]Created WIP commit in {wt.name}:[/green] '{commit_message}'" + f" [green]Created WIP commit in {wt.name}:[/green] '{message}'" ) @@ -1290,62 +1328,5 @@ def attach( app.add_typer(tmux_app) -# @app.command() -# def main( -# dir: Optional[Path] = typer.Argument( -# None, -# help="Base directory containing projects. If omitted, auto-attach or --start behavior.", -# ), -# start: bool = typer.Option( -# False, -# "--start", -# help="Start a new session based on the current directory.", -# ), -# ): -# # Replicate initial "DIR=$1" and attach-or-start logic -# # If no args and no --start -# if dir is None and not start: -# if not_in_tmux(): -# # Try to attach to an existing session -# attach_proc = run_tmux(["attach"]) -# if attach_proc.returncode == 0: -# # Successfully attached; exit like the bash script -# raise typer.Exit(1) -# # If attach failed, fall through to start mode -# start = True -# else: -# # In tmux and no dir/start: nothing to do -# raise typer.Exit(1) -# -# # Figure out session_name and path_name -# if start: -# path_name = Path.cwd() -# session_name = path_name.name.replace(".", "_") -# else: -# if dir is None: -# typer.echo("[ta] DIR argument is required unless --start is used.", err=True) -# raise typer.Exit(1) -# -# dir = dir.expanduser().resolve() -# project = pick_project(dir) -# if not project: -# # cancelled or error -# raise typer.Exit(1) -# -# session_name = project.replace(".", "_") -# path_name = (dir / project).resolve() -# -# typer.echo(f'session name is "{session_name}"') -# typer.echo(f"path name is {path_name}") -# -# if not session_name: -# raise typer.Exit(1) -# -# # Try main attach/create flow; on failure, fall back -# ok = create_if_needed_and_attach(session_name, path_name, start_mode=start) -# if not ok: -# attach_to_first_session() -# - if __name__ == "__main__": app()