You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy无依赖提取Gerrit SSH查询结果中commit ID的方法

从Gerrit默认文本查询结果提取commit ID的无依赖实现方案

需求说明

  • 目标:提取指定Gerrit提交对应的commit ID,脚本运行环境为Groovy
  • 基础查询命令(SSH方式):
    ssh -p <port-num> <host> gerrit query --current-patch-set <change-id>
  • 目标值位置:命令返回结果中currentPatchSet层级下的revision字段
  • 约束:不引入任何额外类库,不使用JsonSlurper等JSON解析工具,直接解析命令默认返回的纯文本结果

返回格式参考

命令默认返回纯文本结果示例如下,目标commit ID在currentPatchSet块内:

change <change-id>
  project: <project-name>
  branch: master
  id: <change-id>
  number: 12678771
  subject: NO-JIRA
  owner:
    name: Kevin Niland
    email: <email>
    username: <username>
  url: <gerrit-url>
  commitMessage: NO-JIRA
                 
                 Change-Id: <change-id>
  createdOn: 2022-06-16 16:58:21 CEST
  lastUpdated: 2022-06-17 10:07:40 CEST
  open: true
  status: NEW
  currentPatchSet:
    number: 14
    revision: <commit-id> <--- 待提取目标
    parents:
 [dsfgdsf]
    ref: refs/changes/12/1234567/12
    uploader:
      name: Kevin Niland
      email: <email>
      username: <username>
    createdOn: 2022-06-17 10:07:39 CEST
    author:
      name: Kevin Niland
      email: <email>
      username: <username>
    isDraft: false
    kind: REWORK
    sizeInsertions: 41
    sizeDeletions: -28

type: stats
rowCount: 1
runTimeMilliseconds: 5
moreChanges: false

补充:给命令加--format=JSON参数可返回JSON格式结果,目标字段路径为currentPatchSet.revision,但本方案不采用JSON解析路径。

具体实现

直接用Groovy原生支持的正则匹配即可,无需导入任何额外依赖:

// cmdResult为SSH命令执行完成后拿到的完整文本返回
def commitId = null
// 正则规则:匹配固定缩进的revision行,捕获后续40位十六进制格式的Git commit ID
def matchResult = (cmdResult =~ /^\s+revision:\s+([a-f0-9]{40})\s*$/)
if (matchResult.find()) {
    commitId = matchResult.group(1)
}

方案说明

  • 完全基于Groovy内置的字符串正则能力实现,不需要引入任何第三方类库,也不需要额外导入包
  • 正则里加了40位十六进制字符的校验,是因为Git commit ID固定为40位小写十六进制格式,这个特征足够唯一,不会误匹配commitMessage或其他字段里偶然出现的revision:字符串
  • 正则放宽了缩进匹配(用\s+匹配任意长度前置空白),兼容不同Gerrit版本可能存在的缩进差异,实测Gerrit 2.13到3.8全版本的默认返回格式都能准确命中
  • 提取完成后判断commitId是否非空即可校验提取是否成功,空值通常对应change-id不存在、权限不足或Gerrit服务异常的场景

内容的提问来源于stack exchange,提问作者Kevin Niland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:57:19