如何通过Gerrit REST API按仓库、分支及起止日期获取变更记录
解决Gerrit REST API获取指定仓库、分支和时间范围变更记录的问题
我来帮你搞定这个问题!你之前调用的projects/{project name}接口确实只会返回项目的元数据信息,要获取变更记录得用Gerrit专门的变更查询端点,而且参数是通过查询参数传递,不是像你设想的那样放到URL路径里哦。
正确的API用法说明
Gerrit获取变更记录的核心端点是/changes/,你需要通过查询参数来过滤项目、分支和时间范围,关键参数如下:
project: 指定目标仓库的名称(比如my-project)branch: 过滤指定分支的变更,格式必须是refs/heads/分支名(比如refs/heads/main或者refs/heads/feature/dev)since: 起始时间,必须是ISO 8601格式(比如2024-05-01T00:00:00Z)until: 结束时间,同样使用ISO 8601格式- 可选参数
status:all: 如果需要获取所有状态的变更(开放、合并、废弃),加上这个参数;默认情况下Gerrit只返回开放状态的变更 - 可选参数
n: 指定单次返回的变更数量(默认最多25条,如需更多可设置n=100,超过的话需要分页处理)
代码示例
用你正在使用的GerritRestAPI库,正确的调用方式应该是这样的:
from gerrit import GerritRestAPI # 初始化API客户端 gerrit_url = "https://your-gerrit-instance.com" rest = GerritRestAPI(url=gerrit_url) # 定义查询参数 params = { "q": [ f"project:{your_project_name}", f"branch:{your_branch_name}", # 注意格式是refs/heads/xxx f"since:{start_date}", # 比如"2024-05-01T00:00:00Z" f"until:{end_date}", # 比如"2024-05-31T23:59:59Z" "status:all" # 可选,获取所有状态的变更 ] } # 发起请求获取变更记录 changes = rest.get("changes/", params=params) # 打印结果示例 for change in changes: print(f"变更ID: {change['id']}, 主题: {change['subject']}, 状态: {change['status']}")
注意事项
- 时间格式必须正确:Gerrit严格要求ISO 8601格式,带时区标识(比如
Z代表UTC时间),如果用本地时间可能会导致过滤结果不准确。 - 分支名称的前缀:一定要加上
refs/heads/,直接写分支名会查不到结果。 - 权限验证:确保你的Gerrit账号有权限访问目标仓库的变更记录,如果是私有仓库,需要在初始化
GerritRestAPI时带上认证信息(比如用户名和HTTP密码/访问令牌)。 - 分页处理:如果符合条件的变更超过25条,Gerrit会只返回前25条,此时需要通过
start参数分页获取后续结果(比如params['start'] = 25获取下一页)。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

