# 合并请求评审(MR Review)
如果使用 project_full_path,确保 project_full_path 编码过,例子:/api/v3/projects/tencent/code--> /api/v3/projects/tencent%2Fcode (/ 编码 %2F)
MR 状态值(state)说明:
opened:MR 当前是打开的
closed:MR 已经被人为关闭
merged:MR 的代码内容已经正常合并
reopened:MR 从 closed 重新被打开
locked:MR 合并中,锁定
# 邀请评审人
邀请某个用户去评审指定的合并请求
POST /api/v3/projects/:id/merge_request/:merge_request_id/review/invite
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer or string | 项目 ID 或 项目全路径 project_full_path |
| merge_request_id | integer | 合并请求的 id |
| reviewer_id | integer | 评审人的 id |
| necessary_reviewer_id | integer | 必要评审人 id |
返回值:
{
"author": {
"id": 223,
"username": "git_user01",
"web_url": "https://git.tencent.com/u/git_user01",
"name": "git_user01",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/223/3301e9f926s54482802104bb08cf7150.gif"
},
"reviewers": [
{
"id": 223,
"username": "git_user01",
"web_url": "https://git.tencent.com/u/git_user01",
"name": "git_user01",
"state": "active",
"avatar_url": "git.tencent.com/assets/images/avatar/no_user_avatar.png",
"type": "invite",
"review_state": "approving",
"created_at": "2017-07-30T07:59:08+0000",
"updated_at": "2017-07-30T07:59:08+0000"
},
{
"id": 45,
"username": "bobi",
"web_url": "https://git.tencent.com/u/bobi",
"name": "bobi",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/45/a75ba2727c7a409cab1d15dd993149aa.jpg",
"type": "invite",
"review_state": "approving",
"created_at": "2017-08-09T02:01:56+0000",
"updated_at": "2017-08-09T02:01:56+0000"
}
],
"id": 351,
"project_id": 14539,
"reviewable_id": 1344,
"reviewable_type": "merge_request",
"commit_id": null,
"state": "approving",
"restrict_type": "single_approve",
"push_reset_enabled": true,
"created_at": "2017-06-20T01:48:30+0000",
"updated_at": "2017-06-20T01:48:30+0000"
}
# 批量邀请评审人
批量邀请用户去评审指定的合并请求
POST /api/v3/projects/:id/merge_request/:merge_request_id/review/batch_invite
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer or string | 项目 ID 或 项目全路径 project_full_path |
| merge_request_id | integer | 合并请求的 id |
| reviewer_ids[] | array of integer(可选) | 评审人的 id 列表,限制数量最大为 100 个 |
| necessary_reviewer_ids[] | array of integer(可选) | 必要评审人 id 列表,限制数量最大为 100 个 |
返回值:
{
"author": {
"id": 223,
"username": "git_user01",
"web_url": "https://git.tencent.com/u/git_user01",
"name": "git_user01",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/223/3301e9f926s54482802104bb08cf7150.gif"
},
"reviewers": [
{
"id": 223,
"username": "git_user01",
"web_url": "https://git.tencent.com/u/git_user01",
"name": "git_user01",
"state": "active",
"avatar_url": "git.tencent.com/assets/images/avatar/no_user_avatar.png",
"type": "invite",
"review_state": "approving",
"created_at": "2017-07-30T07:59:08+0000",
"updated_at": "2017-07-30T07:59:08+0000"
},
{
"id": 45,
"username": "bobi",
"web_url": "https://git.tencent.com/u/bobi",
"name": "bobi",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/45/a75ba2727c7a409cab1d15dd993149aa.jpg",
"type": "invite",
"review_state": "approving",
"created_at": "2017-08-09T02:01:56+0000",
"updated_at": "2017-08-09T02:01:56+0000"
}
],
"id": 351,
"project_id": 14539,
"reviewable_id": 1344,
"reviewable_type": "merge_request",
"commit_id": null,
"state": "approving",
"restrict_type": "single_approve",
"push_reset_enabled": true,
"created_at": "2017-06-20T01:48:30+0000",
"updated_at": "2017-06-20T01:48:30+0000",
"fail_list":[
{
"user_id":1126,
"msg":"403 forbidden, for reviewer:1126 is blocked"
},
{
"user_id":1126,
"msg":"403 forbidden, for necessary reviewer:1126 is blocked"
},
{
"user_id":2274,
"msg":"403 forbidden"
}
]
}
# 移除评审人
在指定的合并请求中移除某位指定的评审人。
DELETE /api/v3/projects/:id/merge_request/:merge_request_id/review/dismissals
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer or string | 项目 ID 或 项目全路径 project_full_path |
| merge_request_id | integer | 合并请求 id |
| reviewer_id | integer | 评审人 id |
返回值:
200或相关状态码
# 取消评审
在项目中取消 MR 的评审
DELETE /api/v3/projects/:id/merge_request/:merge_request_id/review/cancel
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer or string | 项目 ID 或 项目全路径 project_full_path |
| merge_request_id | integer | 合并请求 id |
返回值:
200或相关状态码
# 查询评审信息 (根据 id)
在项目中查询某个指定的合并请求评审信息
GET /api/v3/projects/:id/merge_request/:merge_request_id/review
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer or string | 项目 ID 或 项目全路径 project_full_path |
| merge_request_id | integer | 合并请求的 id |
返回值:
{
"labels": [],
"title": "合并请求",
"description": "描述信息",
"target_branch": "master",
"target_project_id": 14539,
"source_branch": "源分支",
"source_project_id": 14539,
"author": {
"id": 11323,
"username": "git_user1",
"web_url": "https://git.tencent.com/u/git_user1",
"name": "git_user1",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/11323/3301e9f989b94482802104bb08cf7150.gif"
},
"reviewers": [
{
"id": 11323,
"username": "git_user1",
"web_url": "https://git.tencent.com/u/git_helper_01",
"name": "git_user1",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/11323/3301e9f989b94482802104bb08cf7150.gif",
"type": "invite",
"review_state": "approving",
"review_duration": 141,
"created_at": "2017-07-30T08:24:51+0000",
"updated_at": "2017-07-30T08:24:51+0000"
}
],
"id": 351,
"project_id": 14539,
"reviewable_id": 1344,
"reviewable_type": "merge_request",
"commit_id": null,
"state": "approving",
"restrict_type": "single_approve",
"push_reset_enabled": true,
"created_at": "2017-06-20T01:48:30+0000",
"updated_at": "2017-06-20T01:48:30+0000"
}
# 查询评审信息 (根据 iid)
在项目中查询某个指定的合并请求评审信息
GET /api/v3/projects/:id/merge_request/iid/:merge_request_iid/review
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer or string | 项目 ID 或 项目全路径 project_full_path |
| merge_request_iid | integer | 合并请求在项目中的编号 iid |
返回值:
{
"labels": [],
"title": "合并请求",
"description": "描述信息",
"target_branch": "master",
"target_project_id": 14539,
"source_branch": "源分支",
"source_project_id": 14539,
"author": {
"id": 11323,
"username": "git_user1",
"web_url": "https://git.tencent.com/u/git_user1",
"name": "git_user1",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/11323/3301e9f989b94482802104bb08cf7150.gif"
},
"reviewers": [
{
"id": 11323,
"username": "git_user1",
"web_url": "https://git.tencent.com/u/git_helper_01",
"name": "git_user1",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/11323/3301e9f989b94482802104bb08cf7150.gif",
"type": "invite",
"review_state": "approving",
"review_duration": 141,
"created_at": "2017-07-30T08:24:51+0000",
"updated_at": "2017-07-30T08:24:51+0000"
}
],
"id": 351,
"project_id": 14539,
"reviewable_id": 1344,
"reviewable_type": "merge_request",
"iid": 1498,
"state": "approving",
"approver_rule": 1,
"necessary_approver_rule": 0,
"push_reset_enabled": true,
"push_reset_rule": 0,
"created_at": "2017-06-20T01:48:30+0000",
"updated_at": "2017-06-20T01:48:30+0000",
"owners": []
}
# 发表评审意见
评审人对项目内某个指定的合并请求发表评审意见
PUT /api/v3/projects/:id/merge_request/:merge_request_id/reviewer/summary
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer or string | 项目 ID 或 项目全路径 project_full_path |
| merge_request_id | integer | 合并请求的 id |
| reviewer_event | string | 评审人事件,可选:(comment | approve | require_change | deny) |
| summary | string | 评审信息摘要 |
返回值:
{
"author": {
"id": 11323,
"username": "git_user1",
"web_url": "https://git.tencent.com/u/git_user1",
"name": "git_helper_01",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/11323/3301e9f989b94482802104bb08cf7150.gif"
},
"reviewers": [
{
"id": 11323,
"username": "git_user1",
"web_url": "https://git.tencent.com/u/git_user1",
"name": "git_user1",
"state": "active",
"avatar_url": "git.tencent.com/assets/images/avatar/no_user_avatar.png",
"type": "invite",
"review_state": "approving",
"created_at": "2017-07-30T07:59:08+0000",
"updated_at": "2017-07-30T07:59:08+0000"
},
],
"id": 351,
"project_id": 14539,
"reviewable_id": 1344,
"reviewable_type": "merge_request",
"commit_id": null,
"state": "approving",
"restrict_type": "single_approve",
"push_reset_enabled": true,
"created_at": "2017-06-20T01:48:30+0000",
"updated_at": "2017-06-20T01:48:30+0000"
}
# 重置评审状态
重置项目中某个指定的合并请求评审状态,这个合并请求必须处于拒绝或反馈修改的状态
PUT /api/v3/projects/:id/merge_request/:merge_request_id/review/reopen
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer or string | 项目 ID 或 项目全路径 project_full_path |
| merge_request_id | integer | 合并请求 id |
返回值:
{
"author": {
"id": 11323,
"username": "git_user1",
"web_url": "https://git.tencent.com/u/git_user1",
"name": "git_user1",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/11323/a75ba2763c7a409cab1d15dd993149aa.jpg"
},
"reviewers": [
{
"id": 11323,
"username": "git_user1",
"web_url": "https://git.tencent.com/u/git_user1",
"name": "git_user1",
"state": "active",
"avatar_url": "git.tencent.com/uploads/user/avatar/18604/a75ba2763c7a409cab1d15dd993149aa.jpg",
"type": "suggestion",
"review_state": "approving",
"created_at": "2017-06-08T07:37:52+0000",
"updated_at": "2017-08-09T06:42:37+0000"
},
],
"id": 29856,
"project_id": 14539,
"reviewable_id": 1345,
"reviewable_type": "merge_request",
"commit_id": null,
"state": "approving",
"restrict_type": "single_approve",
"push_reset_enabled": true,
"created_at": "2017-06-08T07:37:52+0000",
"updated_at": "2017-08-09T06:42:37+0000"
}
# 查询 dashboard 维度 MR
查询 dashboard 维度 MR
GET /api/v3/dashboard/merge_requests
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| state | string(可选) | 代码状态,可选值:opened:开启,merged:已合并 closed:已关闭 reopened:重新打开,all:全部,不填写默认 opened |
| sort | string(可选) | 排序,允许按 created_desc, created_asc ,updated_desc,updated_asc(默认 created_desc),milestone_due_asc:即将到期的里程碑,milestone_due_desc:即将延期的里程碑 |
| assignee_user_name | string(可选) | 负责人(英文名) |
| author_user_name | string(可选) | 创建人(英文名) |
| page | integer(可选) | 分页(默认值:1) |
| per_page | integer(可选) | 默认页面大小(默认值: 20,最大值: 100) |
| reviewer_user_name | string(可选) | 评审人 |
返回值:
[
{
"project": {
"id": 10,
"description": "我的测试项目。",
"public": false,
"archived": false,
"visibility_level": 0,
"namespace": {
"created_at": "2019-03-16T00:00:07+0000",
"description": "asdf",
"id": 1234,
"name": "asdf",
"owner_id": 80899,
"path": "asdf",
"updated_at": "2019-03-16T00:00:07+0000"
},
"name": "ddd",
"name_with_namespace": "git_user01/ddd",
"path": "ddd",
"path_with_namespace": "git_user01/ddd",
"ssh_url_to_repo": "git@git.tencent.com:git_user01/ddd.git",
"http_url_to_repo": "http://git.tencent.com/git/git_user01/ddd.git",
"https_url_to_repo": "https://git.tencent.com/git/git_user01/ddd.git",
"web_url": "https://git.tencent.com/git_user01/ddd",
"created_at": "2019-07-15T07:47:47+0000",
"last_activity_at": "2019-09-18T07:53:14+0000",
"creator_id": 80899,
"avatar_url": "https://git.tencent.com/uploads/project/avatar/10701768"
},
"merge_requests": [
{
"labels": [],
"id": 39576,
"title": "test",
"target_project_id": 10701768,
"target_branch": "master",
"source_project_id": 10701768,
"source_branch": "test",
"state": "closed",
"merge_status": "can_be_merged",
"iid": 1,
"description": "test",
"created_at": "2019-07-31T06:30:13+0000",
"updated_at": "2019-08-16T07:44:35+0000",
"assignee": {
"id": 1234,
"username": "weesd",
"web_url": "https://git.tencent.com/u/git_user01",
"name": "git_user01",
"state": "active",
"avatar_url": "https://git.tencent.com/assets/images/avatar/no_user_avatar.png"
},
"author": {
"id": 1234,
"username": "asddf",
"web_url": "https://git.tencent.com/u/git_user01",
"name": "git_user01",
"state": "active",
"avatar_url": "https://git.tencent.com/assets/images/avatar/no_user_avatar.png"
},
"milestone": null,
"necessary_reviewers": null,
"suggestion_reviewers": null,
"project_id": 1008,
"work_in_progress": false,
"upvotes": 0,
"downvotes": 0
}
]
}
]
# 查询 MR 已阅文件集
查询代码评审中确认已阅的文件列表
GET /api/v3/projects/:id/merge_request/:merge_request_id/viewed_files
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer or string | 项目 ID 或 项目全路径 project_full_path |
| review_id | integer | 代码评审的 id |
| user_id | string(可选) | 指定阅读人 |
返回值:
[
{
"file_path": "test1",
"created_at": "2019-09-19T12:17:09+0000",
"user": {
"id": null,
"username": "git_user01",
"web_url": "https://git.tencent.com/u/git_user01",
"name": "git_user01",
"state": "active",
"avatar_url": null
}
},
{
"file_path": "test2",
"created_at": "2019-09-19T12:17:16+0000",
"user": {
"id": null,
"username": "git_user02",
"web_url": "https://git.tencent.com/u/git_user02",
"name": "git_user02",
"state": "active",
"avatar_url": null
}
}
]