cnb-rs issue edit
cnb-rs issue edit <NUMBER> [flags]大一统修改 Issue 属性:一次改多个属性(标题 / 描述 / 优先级 / 处理人 / 日期),借鉴 gh issue edit 设计。与 cnb-rs pr edit 设计同源。
P0-3 / P0-4 逐步吸收了 assignee 和 label 管理(
--add-assignee/--remove-assignee/--set-assignees+--add-label/--remove-label/--set-labels/--clear-labels),原独立的issue assigners和issue label子命令组已删除。
选项
文本字段
-t, --title <TITLE>:修改标题-b, --body <BODY>:修改描述-p, --priority <PRIORITY>:修改优先级,可选值:-2P、-1P、P0、P1、P2、P3--start-date <DATE>/--end-date <DATE>:修改开始 / 结束日期(YYYY-MM-DD)
处理人(三组互斥)
--add-assignee <USERNAME>:增量添加处理人(可重复传或逗号分隔;CNB 限单次最多 8 人)--remove-assignee <USERNAME>:移除处理人--set-assignees <USERNAMES>:全量替换处理人列表;与--add-assignee/--remove-assignee互斥
标签(三组互斥)
--add-label <NAME>:增量添加标签--remove-label <NAME>:按 name 移除标签(CNB API 单次只能删一个,CLI 循环调)--set-labels <NAMES>:全量替换标签(先清空再写入);与--add/--remove/--clear互斥--clear-labels:清空所有标签;与其它 label flag 互斥
assignee / label 两组互斥规则由 clap
conflicts_with_all在 flag 层校验,违反时 exit 2。
至少需要传一个修改 flag,否则报错退出。
继承的全局选项:
--repo <REPO>:指定仓库路径(格式:group/repo)--domain <DOMAIN>:指定目标域名(默认:cnb.cool)
输出约定
- stderr:
⚙ 正在并发执行 N 个修改操作...执行前显示总数- 每个成功的操作打
✓ 已更新 <op>(op 是title/body/priority/dates/add-assignee/set-assignees等) - 每个失败的操作打
✗ <op> 失败:<err> - 有失败时最后打
错误: K 个修改操作失败(成功 M)
- stdout:始终输出 Issue URL(即使部分失败)
- 退出码:全部成功 → 0;任一失败 → 1;clap 参数错误 → 2
示例
bash
# 修改标题 + 加处理人,一次并发提交
$ cnb-rs issue edit 42 -t "紧急修复" --add-assignee alice,bob
⚙ 正在并发执行 2 个修改操作...
✓ 已更新 title/body/priority/dates
✓ 已更新 add-assignee
https://cnb.cool/org/repo/-/issues/42
# 全量替换处理人
$ cnb-rs issue edit 42 --set-assignees alice,bob
# 修改优先级
$ cnb-rs issue edit 42 -p P0
# 设置日期范围
$ cnb-rs issue edit 42 --start-date 2025-02-01 --end-date 2025-02-15
# 不带任何 flag:报错
$ cnb-rs issue edit 42
错误: 请至少指定一个修改项:-t/-b/-p/--start-date/--end-date 或 --add/--remove/--set-assignee
# 互斥 flag:clap 在 flag 层拒绝
$ cnb-rs issue edit 42 --add-assignee alice --set-assignees bob
error: the argument '--add-assignee <USERNAME>' cannot be used with '--set-assignees <USERNAME>'API 调用映射
CLI flag 各自对应独立 endpoint,按需调;没传的 flag 完全不发请求;多个操作用 join_all 并发:
| flag | API | 方法 |
|---|---|---|
-t/-b/-p/--start-date/--end-date | ${API}/repos/{repo}/-/issues/{n} | PATCH |
--add-assignee | ${API}/repos/{repo}/-/issues/{n}/assignees | POST |
--remove-assignee | ${API}/repos/{repo}/-/issues/{n}/assignees | DELETE(with body) |
--set-assignees | ${API}/repos/{repo}/-/issues/{n}/assignees | PATCH(全量替换) |
--add-label | ${API}/repos/{repo}/-/issues/{n}/labels | POST |
--remove-label <X> | ${API}/repos/{repo}/-/issues/{n}/labels/{X} | DELETE × N(循环) |
--set-labels | ${API}/repos/{repo}/-/issues/{n}/labels | PUT |
--clear-labels | ${API}/repos/{repo}/-/issues/{n}/labels | DELETE |
迁移指南
从 issue assigners 子命令组(P0-3 删除)
| 旧用法 | 新用法 |
|---|---|
issue assigners get 42 | issue view 42(表格里已含「处理人」一行) |
issue assigners add 42 alice | issue edit 42 --add-assignee alice |
issue assigners remove 42 alice | issue edit 42 --remove-assignee alice |
issue assigners set 42 alice,bob | issue edit 42 --set-assignees alice,bob |
从 issue label 子命令组(P0-4 删除)
| 旧用法 | 新用法 |
|---|---|
issue label list 42 | issue view 42(表格里已含「标签」一行) |
issue label add 42 bug | issue edit 42 --add-label bug |
issue label remove 42 bug | issue edit 42 --remove-label bug |
issue label set 42 bug,urgent | issue edit 42 --set-labels bug,urgent |
issue label clear 42 | issue edit 42 --clear-labels |