跳转到内容

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 assignersissue label 子命令组已删除。

选项

文本字段

  • -t, --title <TITLE>:修改标题
  • -b, --body <BODY>:修改描述
  • -p, --priority <PRIORITY>:修改优先级,可选值:-2P-1PP0P1P2P3
  • --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 并发:

flagAPI方法
-t/-b/-p/--start-date/--end-date${API}/repos/{repo}/-/issues/{n}PATCH
--add-assignee${API}/repos/{repo}/-/issues/{n}/assigneesPOST
--remove-assignee${API}/repos/{repo}/-/issues/{n}/assigneesDELETE(with body)
--set-assignees${API}/repos/{repo}/-/issues/{n}/assigneesPATCH(全量替换)
--add-label${API}/repos/{repo}/-/issues/{n}/labelsPOST
--remove-label <X>${API}/repos/{repo}/-/issues/{n}/labels/{X}DELETE × N(循环)
--set-labels${API}/repos/{repo}/-/issues/{n}/labelsPUT
--clear-labels${API}/repos/{repo}/-/issues/{n}/labelsDELETE

迁移指南

issue assigners 子命令组(P0-3 删除)

旧用法新用法
issue assigners get 42issue view 42(表格里已含「处理人」一行)
issue assigners add 42 aliceissue edit 42 --add-assignee alice
issue assigners remove 42 aliceissue edit 42 --remove-assignee alice
issue assigners set 42 alice,bobissue edit 42 --set-assignees alice,bob

issue label 子命令组(P0-4 删除)

旧用法新用法
issue label list 42issue view 42(表格里已含「标签」一行)
issue label add 42 bugissue edit 42 --add-label bug
issue label remove 42 bugissue edit 42 --remove-label bug
issue label set 42 bug,urgentissue edit 42 --set-labels bug,urgent
issue label clear 42issue edit 42 --clear-labels

另请参阅

Released under the MIT License.