如何判断Gerrit代码评审是否为草稿状态?
判断Gerrit评审是否为草稿的最优方法
我之前做Gerrit自动化工具时也碰到过一模一样的需求,下面是我实践下来最靠谱的几种方法,按优先级推荐:
1. 调用Gerrit REST API查询变更状态(最优方案)
这是最直接、可靠的方式,Gerrit的REST API会返回变更的完整状态信息,完全能满足判断需求。
具体操作步骤:
- 从
patchset-created事件的payload里提取变更的唯一标识:可以是change.id(类似Iabcdef123456789格式的字符串)或者change.number(纯数字的变更编号)。 - 调用Gerrit的变更详情API,示例如下:
# 使用change-id查询的示例 curl -u 你的用户名:你的密码 https://你的Gerrit服务器地址/changes/Iabcdef123456789 # 使用change-number查询的示例 curl -u 你的用户名:你的密码 https://你的Gerrit服务器地址/changes/12345 - 解析返回的JSON数据,重点看
status字段:- 若是草稿评审,
status的值为DRAFT - 若是已发布的普通评审,
status通常为NEW
- 若是草稿评审,
拿到这个状态后,在工具里加个判断逻辑:如果是DRAFT就跳过添加评审者的流程即可。
2. 检查变更的关联属性(备选方案)
部分版本的Gerrit在返回的变更详情里,还会直接提供is_draft布尔字段,或者可以通过actions字段判断——草稿变更会包含publish动作选项,而普通评审没有。不过相比之下,status字段的兼容性更好,不同Gerrit版本的一致性更高,优先用它更稳妥。
3. 扩展Gerrit事件Payload(需服务器管理权限)
如果你有Gerrit服务器的管理权限,且工具对处理延迟要求极高,可以通过修改Gerrit配置或安装自定义插件,让patchset-created事件直接携带草稿状态信息。不过这个方法成本较高,不如调用API灵活,只适合大规模批量处理的场景。
额外提示:
- 调用API时可以根据工具部署环境选择认证方式:Gerrit支持HTTP基本认证、SSH认证两种常用方式。
- 可以给工具加个简单的缓存逻辑,比如缓存最近1小时内的变更状态,减少重复API请求,提升处理效率。
内容的提问来源于stack exchange,提问作者user2303720
相关产品推荐
相关产品推荐

