Add task shortcuts for default card

This commit is contained in:
mpabi
2026-04-29 11:33:18 +02:00
parent 445c4908ef
commit b3be495afb
4 changed files with 130 additions and 6 deletions
+63 -1
View File
@@ -2896,6 +2896,49 @@ def run_series(config: WorkspaceConfig, args: argparse.Namespace) -> None:
raise SystemExit(f"Unsupported series cards tasks command: {args.tasks_command}")
def resolve_task_command_selector(
config: WorkspaceConfig,
values: list[str],
needs_task: bool = False,
) -> tuple[str, str, str | None]:
if not needs_task:
if len(values) > 2:
raise SystemExit("Pass at most '<series> <card>' for tasks list.")
series_arg = values[0] if values else None
card_arg = values[1] if len(values) == 2 else None
series_name, card_name = resolve_selector(config, series_arg, card_arg)
return series_name, card_name, None
if not values:
raise SystemExit("Missing task. Use: ./rvctl tasks switch 4")
if len(values) > 3:
raise SystemExit("Pass '<task>', '<card> <task>' or '<series> <card> <task>'.")
if len(values) == 1:
series_name, card_name = resolve_selector(config, None, None)
return series_name, card_name, values[0]
if len(values) == 2:
series_name, card_name = resolve_selector(config, values[0], None)
return series_name, card_name, values[1]
series_name, card_name = resolve_selector(config, values[0], values[1])
return series_name, card_name, values[2]
def run_tasks(config: WorkspaceConfig, args: argparse.Namespace) -> None:
if args.tasks_command == "list":
series_name, card_name, _ = resolve_task_command_selector(config, args.selector)
print_card_tasks(config, series_name, card_name)
return
if args.tasks_command == "show":
series_name, card_name, task_name = resolve_task_command_selector(config, args.selector, needs_task=True)
print_card_task(config, series_name, card_name, task_name or "")
return
if args.tasks_command == "switch":
series_name, card_name, task_name = resolve_task_command_selector(config, args.selector, needs_task=True)
print_key_values(switch_card_task(config, series_name, card_name, task_name or "", args.branch, args.dry_run))
return
raise SystemExit(f"Unsupported tasks command: {args.tasks_command}")
def print_submission_plan(config: WorkspaceConfig, args: argparse.Namespace) -> None:
series_name, card_name = resolve_selector(config, args.series, args.card)
selector = f"{series_name}/{card_name}"
@@ -3128,6 +3171,7 @@ def print_main_overview(config_path: Path) -> None:
[
["show-config", "", "show resolved paths and Git defaults"],
["series", "list|cards|fetch|tasks", "work with series, cards and tasks"],
["tasks", "list|show|switch", "shortcut for tasks in the default card"],
["list-series", "", "compat alias for series list"],
["list-cards", "[series]", "compat alias for series cards list"],
["tmux-container", "[series] [card]", "start tmux with container in pane 0"],
@@ -3144,7 +3188,8 @@ def print_main_overview(config_path: Path) -> None:
["2", "./rvctl series list", "choose a series"],
["3", "./rvctl series cards list inf", "choose a card"],
["4", "./rvctl series cards fetch inf bss", "fetch card and prepare r1a"],
["5", "./rvctl series cards tasks list inf bss", "list card tasks"],
["5", "./rvctl tasks list", "list tasks from the default card"],
["6", "./rvctl tasks switch 4", "switch to the answer branch for task 4"],
],
)
print()
@@ -3244,6 +3289,20 @@ def build_parser() -> argparse.ArgumentParser:
cards_parser = subparsers.add_parser("list-cards", help="List cards in a series.")
cards_parser.add_argument("series", nargs="?", help="Series id, for example 'inf'.")
tasks_parser = subparsers.add_parser("tasks", help="Shortcut for tasks in the default card.")
tasks_subparsers = tasks_parser.add_subparsers(dest="tasks_command", required=True)
tasks_short_list_parser = tasks_subparsers.add_parser("list", help="List tasks from the default or selected card.")
tasks_short_list_parser.add_argument("selector", nargs="*", help="Optional card selector: [card] or [series card].")
tasks_short_show_parser = tasks_subparsers.add_parser("show", help="Show one task from the default or selected card.")
tasks_short_show_parser.add_argument("selector", nargs="+", help="Task selector: task, card task, or series card task.")
tasks_short_switch_parser = tasks_subparsers.add_parser("switch", help="Create or switch to the answer branch for a task.")
tasks_short_switch_parser.add_argument("selector", nargs="+", help="Task selector: task, card task, or series card task.")
tasks_short_switch_parser.add_argument("--branch", help="Override the branch name.")
tasks_short_switch_parser.add_argument("--dry-run", action="store_true", help="Print plan without switching branches.")
tmux_parser = subparsers.add_parser(
"tmux-container",
help="Create a tmux session with pane 0 running the container shell for a selected card.",
@@ -3478,6 +3537,9 @@ def main() -> int:
if args.command == "list-cards":
print_cards(config, args.series)
return 0
if args.command == "tasks":
run_tasks(config, args)
return 0
if args.command == "tmux-container":
run_tmux_container(config, args)
return 0