Gerrit REST API简单介绍

Gerrit是一款开源免费的代码审查工具,如果其它平台想要获取gerrit数据,比如统计仓库代码提交数据等信息,可以使用Gerrit提供的REST API来获取,本文记录一些我使用到的Gerrit API。

准备工作

Gerrit安装配置方法可参考代码评审平台Gerrit安装配置方法介绍

REST API官方文档:https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.0/rest-api.html

也可以点击gerrit平台的 DOCUMENTATION -> REST API 查看:

使用REST API读取数据需要用户名和密码,本文以admin用户为例,进入用户设置页面,找到HTTP Credentials,点击Generate new password,生成一个http认证密码。

我的用户名密码为:

admin
b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw

gerrit API

gerrit主要包括以下8类API:

下面仅介绍部分我使用到的接口,使用curl命令来测试。

Gerrit REST API使用实例

获取所有项目

/a/projects/

$ curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/a/projects/
)]}'
{
  "All-Projects": {
    "id": "All-Projects",
    "state": "ACTIVE",
    "web_links": [
      {
        "name": "browse",
        "url": "/plugins/gitiles/All-Projects",
        "target": "_blank"
      }
    ]
  },
  "All-Users": {
    "id": "All-Users",
    "state": "ACTIVE",
    "web_links": [
      {
        "name": "browse",
        "url": "/plugins/gitiles/All-Users",
        "target": "_blank"
      }
    ]
  },
  "gerritDemo": {
    "id": "gerritDemo",
    "state": "ACTIVE",
    "web_links": [
      {
        "name": "browse",
        "url": "/plugins/gitiles/gerritDemo",
        "target": "_blank"
      }
    ]
  }
}

为了防止XSSI(XSSICross Site Script Inclusion)攻击,JSON响应数据前面包含了 )]}' 字符,在后续的数据处理中需要将其删除。

获取项目信息

/a/projects/gerritDemo

$ curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/a/projects/gerritDemo
)]}'
{
  "id": "gerritDemo",
  "name": "gerritDemo",
  "parent": "All-Projects",
  "state": "ACTIVE",
  "web_links": [
    {
      "name": "browse",
      "url": "/plugins/gitiles/gerritDemo",
      "target": "_blank"
    }
  ],
  "labels": {
    "Verified": {
      "values": {
        " 0": "No score",
        "-1": "Fails",
        "+1": "Verified"
      },
      "default_value": 0
    },
    "Code-Review": {
      "values": {
        " 0": "No score",
        "-1": "I would prefer this is not submitted as is",
        "-2": "This shall not be submitted",
        "+1": "Looks good to me, but someone else must approve",
        "+2": "Looks good to me, approved"
      },
      "default_value": 0
    }
  }
}

获取项目分支

/a/projects/gerritDemo/branches/

curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/a/projects/gerritDemo/branches/
)]}'
[
  {
    "ref": "HEAD",
    "revision": "master"
  },
  {
    "web_links": [
      {
        "name": "browse",
        "url": "/plugins/gitiles/gerritDemo/+/refs/meta/config",
        "target": "_blank"
      }
    ],
    "ref": "refs/meta/config",
    "revision": "8c739812c1813c52b47db8cb42aeffdacf84baaf"
  },
  {
    "web_links": [
      {
        "name": "browse",
        "url": "/plugins/gitiles/gerritDemo/+/refs/heads/master",
        "target": "_blank"
      }
    ],
    "ref": "refs/heads/master",
    "revision": "44438ca8f90741ef10e10a6574487975d2f82141"
  }
]

提交记录

changes: /a/changes/

过滤条件:project:gerritDemo status:open branch:master

REST API:

curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/a/changes/?q=status:open+project:gerritDemo+branch:master

返回:

curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/a/changes/?q=status:open+project:gerritDemo+branch:master
)]}'
[
  {
    "id": "gerritDemo~master~Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd",
    "project": "gerritDemo",
    "branch": "master",
    "topic": "test",
    "attention_set": {
      "1000001": {
        "account": {
          "_account_id": 1000001
        },
        "last_update": "2023-07-04 13:30:26.000000000",
        "reason": "<GERRIT_ACCOUNT_1000000> replied on the change",
        "reason_account": {
          "_account_id": 1000000
        }
      }
    },
    "removed_from_attention_set": {},
    "hashtags": [],
    "change_id": "Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd",
    "subject": "gerrit提交测试",
    "status": "NEW",
    "created": "2023-07-03 13:00:34.000000000",
    "updated": "2023-07-04 13:32:30.000000000",
    "submit_type": "MERGE_IF_NECESSARY",
    "insertions": 1,
    "deletions": 0,
    "total_comment_count": 1,
    "unresolved_comment_count": 0,
    "has_review_started": true,
    "meta_rev_id": "f0c2f1952432d62db1f6b8d23d83e4399facab25",
    "_number": 1,
    "owner": {
      "_account_id": 1000000
    },
    "requirements": [],
    "submit_records": [
      {
        "rule_name": "gerrit~DefaultSubmitRule",
        "status": "NOT_READY",
        "labels": [
          {
            "label": "Code-Review",
            "status": "NEED"
          },
          {
            "label": "Verified",
            "status": "NEED"
          }
        ]
      }
    ]
  }
]

Change Messages

通过change ID读取提交的详细信息:a/changes/gerritDemo~master~Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd/messages,包含评分及评论内容。

$ curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/a/changes/gerritDemo~master~Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd/messages
)]}'
[
  {
    "id": "0556a0aff79e94456565d656c7eabf31c5bd07fb",
    "tag": "autogenerated:gerrit:newPatchSet",
    "author": {
      "_account_id": 1000000,
      "name": "admin",
      "email": "123456789@163.com",
      "username": "admin"
    },
    "real_author": {
      "_account_id": 1000000,
      "name": "admin",
      "email": "123456789@163.com",
      "username": "admin"
    },
    "date": "2023-07-03 13:00:34.000000000",
    "message": "Uploaded patch set 1.",
    "accounts_in_message": [],
    "_revision_number": 1
  },
  {
    "id": "28d364b0bd5018a556b1a0bd41c6fb0dd1d1c739",
    "author": {
      "_account_id": 1000000,
      "name": "admin",
      "email": "123456789@163.com",
      "username": "admin"
    },
    "real_author": {
      "_account_id": 1000000,
      "name": "admin",
      "email": "123456789@163.com",
      "username": "admin"
    },
    "date": "2023-07-03 13:42:19.000000000",
    "message": "Patch Set 1: Verified+1 Code-Review+1\n\n(1 comment)",
    "accounts_in_message": [],
    "_revision_number": 1
  },
 ................................
]

提交的详细信息

a/changes/UGW_main~dev_ugw6.0_main_for_AX2Pro~Ifc3ec88e7f6648a834a743c465dd7cce1c268789/detail:某次提交的详细信息,比messages更详细,包括评审人、评审等信息。

$ curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/a/changes/gerritDemo~master~Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd/detail
)]}'
{
  "id": "gerritDemo~master~Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd",
  "project": "gerritDemo",
  "branch": "master",
  "topic": "test",
  "attention_set": {
    "1000001": {
      "account": {
        "_account_id": 1000001,
        "name": "gerrit",
        "email": "987654321@qq.com",
        "username": "gerrit"
      },
      "last_update": "2023-07-04 13:30:26.000000000",
      "reason": "<GERRIT_ACCOUNT_1000000> replied on the change",
      "reason_account": {
        "_account_id": 1000000,
        "name": "admin",
        "email": "123456789@163.com",
        "username": "admin"
      }
    }
  },
  "removed_from_attention_set": {},
  "hashtags": [],
  "change_id": "Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd",
  "subject": "gerrit提交测试",
  "status": "NEW",
  "created": "2023-07-03 13:00:34.000000000",
  "updated": "2023-07-04 13:32:30.000000000",
  "submit_type": "MERGE_IF_NECESSARY",
  "insertions": 1,
  "deletions": 0,
  "total_comment_count": 1,
  "unresolved_comment_count": 0,
  "has_review_started": true,
  "meta_rev_id": "f0c2f1952432d62db1f6b8d23d83e4399facab25",
  "_number": 1,
  "owner": {
    "_account_id": 1000000,
    "name": "admin",
    "email": "123456789@163.com",
    "username": "admin"
  },
  "labels": {
    "Code-Review": {
      "all": [
        {
          "value": 0,
          "permitted_voting_range": {
            "min": -1,
            "max": 1
          },
          "_account_id": 1000001,
          "name": "gerrit",
          "email": "987654321@qq.com",
          "username": "gerrit"
        },
        {
          "value": 0,
          "date": "2023-07-04 13:30:26.000000000",
          "permitted_voting_range": {
            "min": -2,
            "max": 2
          },
          "_account_id": 1000000,
          "name": "admin",
          "email": "123456789@163.com",
          "username": "admin"
        }
      ],
      "values": {
        "-2": "This shall not be submitted",
        "-1": "I would prefer this is not submitted as is",
        " 0": "No score",
        "+1": "Looks good to me, but someone else must approve",
        "+2": "Looks good to me, approved"
      },
      "description": "",
      "default_value": 0
    },
    "Verified": {
      "all": [
        {
          "_account_id": 1000001,
          "name": "gerrit",
          "email": "987654321@qq.com",
          "username": "gerrit"
        },
        {
          "value": 0,
          "date": "2023-07-04 13:30:26.000000000",
          "permitted_voting_range": {
            "min": -1,
            "max": 1
          },
          "_account_id": 1000000,
          "name": "admin",
          "email": "123456789@163.com",
          "username": "admin"
        }
      ],
      "values": {
        "-1": "Fails",
        " 0": "No score",
        "+1": "Verified"
      },
      "description": "",
      "default_value": 0
    }
  },
  "permitted_labels": {
    "Code-Review": [
      "-2",
      "-1",
      " 0",
      "+1",
      "+2"
    ],
    "Verified": [
      "-1",
      " 0",
      "+1"
    ]
  },
  "removable_reviewers": [
    {
      "_account_id": 1000001,
      "name": "gerrit",
      "email": "987654321@qq.com",
      "username": "gerrit"
    },
    {
      "_account_id": 1000000,
      "name": "admin",
      "email": "123456789@163.com",
      "username": "admin"
    }
  ],
  "reviewers": {
    "REVIEWER": [
      {
        "_account_id": 1000000,
        "name": "admin",
        "email": "123456789@163.com",
        "username": "admin"
      },
      {
        "_account_id": 1000001,
        "name": "gerrit",
        "email": "987654321@qq.com",
        "username": "gerrit"
      }
    ]
  },
  "pending_reviewers": {},
  "reviewer_updates": [
    {
      "updated": "2023-07-04 13:30:26.000000000",
      "updated_by": {
        "_account_id": 1000000,
        "name": "admin",
        "email": "123456789@163.com",
        "username": "admin"
      },
      "reviewer": {
        "_account_id": 1000001,
        "name": "gerrit",
        "email": "987654321@qq.com",
        "username": "gerrit"
      },
      "state": "REVIEWER"
    }
  ],
  "messages": [
    {
      "id": "0556a0aff79e94456565d656c7eabf31c5bd07fb",
      "tag": "autogenerated:gerrit:newPatchSet",
      "author": {
        "_account_id": 1000000,
        "name": "admin",
        "email": "123456789@163.com",
        "username": "admin"
      },
      "real_author": {
        "_account_id": 1000000,
        "name": "admin",
        "email": "123456789@163.com",
        "username": "admin"
      },
      "date": "2023-07-03 13:00:34.000000000",
      "message": "Uploaded patch set 1.",
      "accounts_in_message": [],
      "_revision_number": 1
    },
    {
      "id": "28d364b0bd5018a556b1a0bd41c6fb0dd1d1c739",
      "author": {
        "_account_id": 1000000,
        "name": "admin",
        "email": "123456789@163.com",
        "username": "admin"
      },
      "real_author": {
        "_account_id": 1000000,
        "name": "admin",
        "email": "123456789@163.com",
        "username": "admin"
      },
      "date": "2023-07-03 13:42:19.000000000",
      "message": "Patch Set 1: Verified+1 Code-Review+1\n\n(1 comment)",
      "accounts_in_message": [],
      "_revision_number": 1
    },
    {
      "id": "8a4eb8d2a7fd3bc7481e6365b3afff3b7d2f54f7",
      "author": {
        "_account_id": 1000000,
        "name": "admin",
        "email": "123456789@163.com",
        "username": "admin"
      },
      "real_author": {
        "_account_id": 1000000,
        "name": "admin",
        "email": "123456789@163.com",
        "username": "admin"
      },
      "date": "2023-07-03 13:42:47.000000000",
      "message": "Patch Set 1: Code-Review+2",
      "accounts_in_message": [],
      "_revision_number": 1
    },
 ..........................
  ],
  "requirements": [],
  "submit_records": [
    {
      "rule_name": "gerrit~DefaultSubmitRule",
      "status": "NOT_READY",
      "labels": [
        {
          "label": "Code-Review",
          "status": "NEED"
        },
        {
          "label": "Verified",
          "status": "NEED"
        }
      ]
    }
  ]
}

获取评审信息

评审人:/a/changes/gerritDemo~master~Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd/reviewers

$  curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/a/changes/gerritDemo~master~Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd/reviewers
)]}'
[
  {
    "approvals": {
      "Code-Review": " 0"
    },
    "_account_id": 1000001,
    "name": "gerrit",
    "email": "987654321@qq.com",
    "username": "gerrit"
  },
  {
    "approvals": {
      "Code-Review": " 0",
      "Verified": " 0"
    },
    "_account_id": 1000000,
    "name": "admin",
    "email": "123456789@163.com",
    "username": "admin"
  }
]
  
$ curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/a/changes/gerritDemo~master~Ia461fa2b266a749a8e195bb668938cc5c4f8a2dd/reviewers/987654321@qq.com
)]}'
[
  {
    "approvals": {
      "Code-Review": " 0"
    },
    "_account_id": 1000001,
    "name": "gerrit",
    "email": "987654321@qq.com",
    "username": "gerrit"
  }
]

读取用户信息

/accounts/1000001

$curl --user admin:b0JoSt8KQHm5OhHhBsH+HN+GNVK9OPXrUzjGCXbxuw http://172.23.23.31:8081/accounts/1000001
)]}'
{
  "_account_id": 1000001,
  "name": "gerrit",
  "email": "987654321@qq.com",
  "username": "gerrit"
}

API数据返回限制

Gerrit REST API限制了一次请求最多返回500条记录,如果当前请求接口数据大于500条,在最后一条记录会有一个名称为_more_changes 的字段,值为true

...............
{
      "id": "demo~master~I09c8041b5867d5b33170316e2abc34b79bbb8501",
      "project": "demo",
      "branch": "master",
      "change_id": "I09c8041b5867d5b33170316e2abc34b79bbb8501",
      "subject": "Another change",
      "status": "NEW",
      "created": "2012-07-17 07:18:30.884000000",
      "updated": "2012-07-17 07:18:30.885000000",
      "mergeable": true,
      "insertions": 12,
      "deletions": 18,
      "_number": 1757,
      "owner": {
        "name": "John Doe"
      },
      "_more_changes": true
  }
  ]

可以使用 S 参数来读取更多记录:

http://172.16.30.72:8080/a/changes/?q=project:UGW_main+branch:dev_ugw6.0_main&S=0
http://172.16.30.72:8080/a/changes/?q=project:UGW_main+branch:dev_ugw6.0_main&S=500
http://172.16.30.72:8080/a/changes/?q=project:UGW_main+branch:dev_ugw6.0_main&S=1000

参考文档:

  1. 官网:https://www.gerritcodereview.com/
  2. 接口说明文档:https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.0/rest-api.html
--THE END--

相关阅读:

  1. 代码评审平台Gerrit安装配置方法介绍
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Gerrit是一种开源的代码审查工具,用于团队协作和代码质量管理。它支持多种代码审查工作流程,并提供了强大的代码审查和版本控制功能。 Gerrit支持对代码的评论、讨论和修改建议,使团队成员可以更好地合作进行代码审查。每一次代码变更都可以通过Gerrit进行审查,并且可以根据审查结果进行修复和改进。 通过Gerrit,团队可以更加方便地进行代码审核,从而提高代码质量和项目的稳定性。团队成员可以通过Gerrit对代码进行评分和评论,并提出修改建议。这能够帮助团队更好地发现和解决潜在的问题,提高代码的可读性和可维护性。 此外,Gerrit还提供了版本控制功能,可以支持多个代码仓库的管理。团队成员可以使用Gerrit来提交和推送代码变更,同时也可以进行代码的回退和恢复操作。这种版本控制的方式既方便又可靠,确保了团队的代码管理和版本控制的一致性。 关于Gerrit PDF,通常是指Gerrit用户手册或开发指南的PDF版本。这个PDF提供了Gerrit的详细使用说明和开发指导,对于想要深入了解和使用Gerrit的人来说是非常有价值的资源。Gerrit PDF的内容包括如何安装和配置Gerrit、如何进行代码的提交和审查、如何管理和维护Gerrit等方面的内容。 总的来说,Gerrit是一个功能强大的代码审查和版本控制工具,它可以帮助团队更好地协作,提高代码质量和项目的稳定性。Gerrit PDF则是提供了详细的使用手册,帮助用户更好地了解和使用Gerrit

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值