# Pulls ## Get a pull request 获取合并请求详情接口 > 示例: ```shell curl -X GET http://localhost:3000/api/Jasder/gitlink/pulls/88.json ``` ```javascript await octokit.request('GET /api/Jasder/gitlink/pulls/88.json') ``` ### HTTP 请求 `GET /api/:owner/:repo/pulls/:id.json` ### 请求参数: 参数 | 必选 | 默认 | 类型 | 字段说明 --------- | ------- | ------- | -------- | ---------- |owner |是| |string |用户登录名 | |repo |是| |string |项目标识identifier | |id |是| | integer | pull id值 | > 返回的JSON示例: ```json { "status": 0, "message": "响应成功", "project_name": "Gitlink", "identifier": "forgeplus", "project_identifier": "forgeplus", "pr_time": "52分钟前", "commits_count": 229, "files_count": 328, "comments_count": 0, "comments_total_count": 0, "pull_request": { "id": 1189, "base": "master", "head": "develop", "status": 0, "fork_project_id": null, "is_original": false, "pull_request_staus": "open", "fork_project_user": null, "create_user": "jasder", "mergeable": true, "state": "open" }, "issue": { "id": 51888, "subject": "FIx release v3.2.0", "description": null, "is_private": false, "branch_name": null, "project_author_name": "Gitlink", "closed_on": "", "created_at": "2021-10-12 15:51", "assign_user_name": "victor", "assign_user_login": "moshenglv", "author_name": "段甲生", "author_login": "jasder", "author_picture": "images/avatars/User/36480?t=1615520120", "issue_status": "新增", "priority": "正常", "version": null, "issue_tags": null }, "conflict_files": [] } ``` ## 获取pull request文件列表 获取pull request文件列表 > 示例: ```shell curl -X GET \ http://localhost:3000/api/Jason/gitlink/pulls/1/files.json ``` ```javascript await octokit.request('GET /api/jasder/gitlink/pulls/1/files.json') ``` ### HTTP 请求 `GET /api/:owner/:repo/pulls/:id/files.json` ### 请求参数: |参数名|必选|类型|说明| |-|-|-|-| |owner |是|string |用户登录名 | |repo |是|string |project's identifier | |id |是|int |pull request's id | ### 返回字段说明: 参数 | 类型 | 字段说明 --------- | ----------- | ----------- |-|-|-| |files_count |int|文件更改的总数量| |total_addition |int|添加代码总行数| |total_deletion |int|删除代码总行数| |files |array|| |-- sha |string|commit's sha value| |-- name |string|当前文件名| |-- old_name |string| 修改之前的文件名称,与name相同的话,说明文件名未更改| |-- addition |int|文件添加的行数| |-- deletion |int|文件删除的行数| |-- type |int|文件类型, 1: 表示该文件只添加了内容,2: 表示该文件内容有修改, 3: 表示文件被删除或者改文件只删除了内容| |-- isCreated |boolean|当前文件是否为新增文件, true: 是, false: 否| |-- isDeleted |boolean|当前文件是否被删除, true: 是,false: 否| |-- isBin |boolean|当前文件是否为二进制文件,true: 是,false: 否| |-- isLFSFile |boolean|当前文件是否为LFS文件,true: 是,false: 否| |-- isRenamed |boolean|当前文件是否被重命名,true: 是,false: 否| |-- sections |array|| |---- fileName |string|文件名称| |---- lines |array|| |------ leftIdx |string|文件变动之前所在行数| |------ rightIdx |string|文件更改后所在行数| |------ type |string|文件变更类型,1: 新增,2: 修改, 3: 删除, 4: diff统计信息| |------ content |string|文件变更的内容| |------ sectionInfo |object|| |-------- path |string|文件相对仓库的路径| |-------- lastLeftIdx |int|| |-------- lastRightIdx |int|| |-------- leftHunkSize |int|文件变更之前的行数| |-------- rightHunkSize |int|文件变更之后的行数(及当前页面编辑器显示的总行数)| |-------- leftIdx |int|文件变更之前所在行数| |-------- rightIdx |int|文件变更之后所在行数(即:页面编辑器开始显示的行数)| > 返回的JSON示例: ```json { "files_count": 6, "total_addition": 447, "total_deletion": 0, "files": [ { "sha": "xefenisnii", "name": "文件.txt", "old_name": "文件.txt", "index": 6, "addition": 2, "deletion": 0, "type": 1, "isCreated": true, "isDeleted": false, "isBin": false, "isLFSFile": false, "isRenamed": false, "isSubmodule": false, "sections": [ { "fileName": "文件.txt", "name": "", "lines": [ { "leftIdx": 0, "rightIdx": 0, "type": 4, "content": "@@ -0,0 +1,2 @@", "sectionInfo": { "path": null, "lastLeftIdx": null, "lastRightIdx": null, "leftIdx": 0, "rightIdx": 0, "leftHunkSize": null, "rightHunkSize": null } }, { "leftIdx": 0, "rightIdx": 1, "type": 2, "content": "+用例图一致性更新", "sectionInfo": null }, { "leftIdx": 0, "rightIdx": 2, "type": 2, "content": "+工程文件直接上传会有文件缺失,现在压缩后上传", "sectionInfo": null } ] } ] } ] } ``` ## 获取pull request的commits列表 获取pull request的commits列表 > 示例: ```shell curl -X GET http://localhost:3000/api/jasder/jasder_test/pulls/1/commits.json ``` ```javascript await octokit.request('GET /api/jasder/jasder_test/pulls/1/commits.json') ``` ### HTTP 请求 `GET /api/:owner/:repo/pulls/:id/commits.json` ### 请求参数: |参数名|必选|类型|说明| |-|-|-|-| |owner |是|string |用户登录名 | |repo |是|string |project's identifier | |id |是|int |pull request's id | ### 返回字段说明: 参数 | 类型 | 字段说明 --------- | ----------- | ----------- |commits_count |int|commits总数量| |commits |array|| |-- author |object|项目作者| |---- login |string|用户login| |---- name |string|用户姓名| |---- image_url |string|用户头像| |-- committer |object|commit提交用户| |---- login |string|用户login| |---- name |string|用户姓名| |---- image_url |string|用户头像| |-- timestamp |int|commit的unix时间戳| |-- time_from_now|string|commit’s 提交时间距当前时间的时间值| |-- message |string|commit说明信息| |-- sha |string|commit’s sha值| > 返回的JSON示例: ```json { "commits_count": 1, "commits": [ { "author": { "id": 36480, "login": "jasder", "name": "段甲生", "image_url": "avatars/User/b" }, "committer": { "id": 36480, "login": "jasder", "name": "段甲生", "image_url": "avatars/User/b" }, "timestamp": 1604382982, "time_from_now": "3小时前", "message": "add some file\n* Add the tag list page to the release page\n* Apply suggestions from code review\n* Add the tags list view\n* Add the delete tag way on ui\n* Not delete tag and clear message when delete a release\n", "sha": "8f5faee0d3b3be1b8063e84da0c79dd75327b968" } ] } ``` ## Compare two commits Compare two commits > 示例: ```shell curl -X GET \ http://localhost:3000/api/Jason/test-txt/compare/master...develop curl -X GET \ http://localhost:3000/api/Jason/test-txt/compare/master...Jason/test-txt:develop ``` ```javascript await octokit.request('GET /api/Jason/test-txt/compare/master...Jason/test-txt:develop') ``` ### HTTP 请求 `GET /api/:owner/:repo/compare/{base}...{head}.json` ### 请求参数: |参数名|必选|类型|说明| |-|-|-|-| |owner |是|string |用户登录名 | |repo |是|string |project's identifier | |base |是|string |pull request's id | |head |是|string |pull request's id | ### 返回字段说明: 参数 | 类型 | 字段说明 --------- | ----------- | ----------- |-|-|-| |commits_count |int|commits总数量| |commits |array|| |-- author |object|项目作者| |---- login |string|用户login| |---- name |string|用户姓名| |---- image_url |string|用户头像| |-- committer |object|commit提交用户| |---- login |string|用户login| |---- name |string|用户姓名| |---- image_url |string|用户头像| |-- timestamp |int|commit的unix时间戳| |-- time_from_now|string|commit’s 提交时间距当前时间的时间值| |-- message |string|commit说明信息| |-- sha |string|commit’s sha值| |diff |object|| |-- files_count |int|文件更改的总数量| |-- total_addition |int|添加代码总行数| |-- total_deletion |int|删除代码总行数| |-- files |Array|| |-- sha |string|commit's sha | |-- name |string|当前文件名| |-- old_name |string| 修改之前的文件名称,与name相同的话,说明文件名未更改| |-- addition |int|文件添加的行数| |-- deletion |int|文件删除的行数| |-- type |int|文件类型, 1: 表示该文件只添加了内容,2: 表示该文件内容有修改, 3: 表示文件被删除或者改文件只删除了内容| |-- isCreated |boolean|当前文件是否为新增文件, true: 是, false: 否| |-- isDeleted |boolean|当前文件是否被删除, true: 是,false: 否| |-- isBin |boolean|当前文件是否为二进制文件,true: 是,false: 否| |-- isLFSFile |boolean|当前文件是否为LFS文件,true: 是,false: 否| |-- isRenamed |boolean|当前文件是否被重命名,true: 是,false: 否| |-- sections |array|| |---- fileName |string|文件名称| |---- lines |array|| |------ leftIdx |string|文件变动之前所在行数| |------ rightIdx |string|文件更改后所在行数| |------ type |string|文件变更类型,1: 内容未改动,2: 添加, 3: 删除, 4: diff统计信息| |------ content |string|文件变更的内容| |------ sectionInfo |object|| |-------- path |string|文件相对仓库的路径| |-------- lastLeftIdx |int|| |-------- lastRightIdx |int|| |-------- leftHunkSize |int|文件变更之前的行数| |-------- rightHunkSize |int|文件变更之后的行数(及当前页面编辑器显示的总行数)| |-------- leftIdx |int|文件变更之前所在行数| |-------- rightIdx |int|文件变更之后所在行数| > 返回的JSON示例: ```json { "commits_count": 1, "commits": [ { "author": { "id": 36480, "login": "jasder", "name": "段甲生", "image_url": "avatars/User/b" }, "committer": { "id": 36480, "login": "jasder", "name": "段甲生", "image_url": "avatars/User/b" }, "timestamp": 1604382982, "time_from_now": "4小时前", "message": "add some file\n* Add the tag list page to the release page\n* Apply suggestions from code review\n* Add the tags list view\n* Add the delete tag way on ui\n* Not delete tag and clear message when delete a release\n", "sha": "8f5faee0d3b3be1b8063e84da0c79dd75327b968" } ], "diff": { "files_count": 6, "total_addition": 447, "total_deletion": 0, "files": [ { "name": "build.go", "old_name": "build.go", "index": 1, "addition": 33, "deletion": 0, "type": 1, "isCreated": true, "isDeleted": false, "isBin": false, "isLFSFile": false, "isRenamed": false, "isSubmodule": false, "sections": [ { "fileName": "build.go", "name": "", "lines": [ { "leftIdx": 0, "rightIdx": 0, "type": 4, "content": "@@ -0,0 +1,33 @@", "sectionInfo": { "path": "build.go", "lastLeftIdx": 0, "lastRightIdx": 0, "leftIdx": 0, "rightIdx": 1, "leftHunkSize": 0, "rightHunkSize": 33 } }, { "leftIdx": 0, "rightIdx": 1, "type": 2, "content": "+// Copyright 2020 The Gitea Authors. All rights reserved.", "sectionInfo": null } ] } ] } ] } ``` ## List pull requests 获取合并请求列表 > 示例: ```shell curl -X GET http://localhost:3000/api/Jasder/gitlink/pulls.json ``` ```javascript await octokit.request('GET /api/Jasder/gitlink/pulls.json') ``` ### HTTP 请求 `GET /api/:owner/:repo/pulls.json` ### 请求参数: 参数 | 必选 | 默认 | 类型 | 字段说明 --------- | ------- | ------- | -------- | ---------- |owner |是| |string |用户登录名 | |repo |是| |string |项目标识identifier | > 返回的JSON示例: ```json { "status": 0, "message": "响应成功", "open_count": 4, "close_count": 51, "merged_issues_size": 123, "search_count": 4, "limit": null, "user_admin_or_member": true, "user_admin_or_developer": true, "project_name": "Gitlink", "project_author_name": "Gitlink", "issues": [ { "pull_request_id": 1189, "pull_request_status": 0, "pull_request_head": "develop", "pull_request_base": "master", "pull_request_staus": "open", "is_original": false, "fork_project_id": null, "fork_project_identifier": null, "fork_project_user": null, "id": 51888, "name": "FIx release v3.2.0", "pr_time": "59分钟前", "assign_user_name": "victor", "assign_user_login": "moshenglv", "author_name": "段甲生", "author_login": "jasder", "avatar_url": "images/avatars/User/36480?t=1615520120", "priority": "正常", "version": null, "journals_count": 0, "issue_tags": null } ] } ``` ## 获取合并请求版本列表 获取合并请求版本列表 > 示例: ```shell curl -X GET http://localhost:3000/api/v1/yystopf/ceshi_commit/pulls/3/versions.json ``` ```javascript await octokit.request('GET /api/v1/yystopf/ceshi_commit/pulls/3/versions.json') ``` ### HTTP 请求 `GET /api/v1/:owner/:repo/pulls/:index/versions.json` ### 请求参数: 参数 | 必选 | 默认 | 类型 | 字段说明 --------- | ------- | ------- | -------- | ---------- |owner |是| |string |用户登录名 | |repo |是| |string |项目标识identifier | |index |是|| int |合并请求序号| ### 返回字段说明: 参数 | 类型 | 字段说明 --------- | ----------- | ----------- |total_count |int |合并请求版本总数| |versions.id |int |版本ID| |versions.add_line_num |int |该版本新增行数| |versions.del_line_num |int |该版本删除行数| |versions.commits_count |int |该版本提交总数| |versions.files_count |int |该版本提交文件总数| |versions.base_commit_sha |string |目标commit ID| |versions.head_commit_sha |string |源commit ID| |versions.start_commit_sha|string |该版本起始commit ID| |versions.created_time |int |版本创建时间| |versions.updated_time |int |版本更新时间| > 返回的JSON示例: ```json { "total_count": 1, "versions": [ { "id": 33, "add_line_num": 5, "del_line_num": 2, "commits_count": 31, "files_count": 29, "base_commit_sha": "4a277037093c1248e46d2946ee30b61cccdb9df9", "head_commit_sha": "fa3b1cdc8e0727d0fb9c96d28c545867c39815b8", "start_commit_sha": "e49b1fd335e093a440fcf35a21e050afd48ef932", "created_time": 1658469499, "updated_time": 1658469499 } ] } ``` ## 获取合并请求版本Diff 获取合并请求版本Diff(支持获取单文件Diff) > 示例: ```shell curl -X GET \ -d "filepath=ceshi_dir_1/new_file_1" \ http://localhost:3000/api/v1/yystopf/ceshi_commit/pulls/3/versions/33/diff.json ``` ```javascript await octokit.request('GET /api/v1/yystopf/ceshi_commit/pulls/3/versions/33/diff.json') ``` ### HTTP 请求 `GET /api/v1/:owner/:repo/pulls/:index/versions/:version_id/diff.json` ### 请求参数: 参数 | 必选 | 默认 | 类型 | 字段说明 --------- | ------- | ------- | -------- | ---------- |owner |是| |string |用户登录名 | |repo |是| |string |项目标识identifier | |index |是|| int |合并请求序号| |version_id|是|| int |版本ID| |filepath|否||string|文件路径| ### 列表返回字段说明: 参数 | 类型 | 字段说明 --------- | ----------- | ----------- |file_nums|int|文件数量| |total_addition|int|新增行数| |total_deletion|int|删除行数| |files.name|string|文件名称| |files.oldname|string|文件修改前名称| |files.addition|int|文件新增行数| |files.deletion|int|文件删除行数| |files.type|int|文件类型 1: 新增 2: 更改 3: 删除 4: 重命名 5: 复制| |files.is_created|bool|是否为新建文件| |files.is_deleted|bool|是否为删除文件| |files.is_bin|bool|是否为二进制文件| |files.is_lfs_file|bool|是否为LFS文件| |files.is_renamed|bool|是否重命名| |files.is_ambiguous|bool|| |files.is_submodule|bool|是否为子模块| |files.sections.file_name|string|文件名称| |files.sections.name|string|| |files.sections.lines.left_index|int|文件变动之前所在行数| |files.sections.lines.right_index|int|文件变动之后所在行数| |files.sections.lines.match|int|| |files.sections.lines.type|int|文件变更类型| |files.sections.lines.content|string|文件变更内容| |files.sections.lines.section_path|string|文件路径| |files.sections.lines.section_last_left_index|int|| |files.sections.lines.section_last_right_index|int|| |files.sections.lines.section_left_index|int|文件变更之前所在行数| |files.sections.lines.section_right_index|int|文件变更之后所在行数(即:页面编辑器开始显示的行数)| |files.sections.lines.section_left_hunk_size|int|文件变更之前的行数| |files.sections.lines.section_right_hunk_size|int|文件变更之后的行数(及当前页面编辑器显示的总行数)| |files.is_incomplete|bool|是否不完整| |files.is_incomplete_line_too_long|bool|文件是否不完整是因为太长了| |files.is_protected|bool|文件是否被保护| > 列表返回的JSON示例: ```json { "file_nums": 29, "total_addition": 5, "total_deletion": 2, "files": [ { "name": "README.md", "oldname": "README.md", "addition": 1, "deletion": 2, "type": 2, "is_created": false, "is_deleted": false, "is_bin": false, "is_lfs_file": false, "is_renamed": false, "is_ambiguous": false, "is_submodule": false, "sections": [ { "file_name": "README.md", "name": "", "lines": [ { "left_index": 0, "right_index": 0, "match": 0, "type": 4, "content": "@@ -1,2 +1 @@", "section_path": "README.md", "section_last_left_index": 0, "section_last_right_index": 0, "section_left_index": 1, "section_right_index": 1, "section_left_hunk_size": 2, "section_right_hunk_size": 0 }, { "left_index": 1, "right_index": 0, "match": 3, "type": 3, "content": "-# ceshi_commit" }, { "left_index": 2, "right_index": 0, "match": -1, "type": 3, "content": "-" }, { "left_index": 0, "right_index": 1, "match": 1, "type": 2, "content": "+adsa" } ] }, {} ], "is_incomplete": false, "is_incomplete_line_too_long": false, "is_protected": false } ] } ``` ### 单个文件返回字段说明: 参数 | 类型 | 字段说明 --------- | ----------- | ----------- |name|string|文件名称| |oldname|string|文件修改前名称| |addition|int|文件新增行数| |deletion|int|文件删除行数| |type|int|文件类型 1: 新增 2: 更改 3: 删除 4: 重命名 5: 复制| |is_created|bool|是否为新建文件| |is_deleted|bool|是否为删除文件| |is_bin|bool|是否为二进制文件| |is_lfs_file|bool|是否为LFS文件| |is_renamed|bool|是否重命名| |is_ambiguous|bool|| |is_submodule|bool|是否为子模块| |sections.file_name|string|文件名称| |sections.name|string|| |sections.lines.left_index|int|文件变动之前所在行数| |sections.lines.right_index|int|文件变动之后所在行数| |sections.lines.match|int|| |sections.lines.type|int|文件变更类型| |sections.lines.content|string|文件变更内容| |sections.lines.section_path|string|文件路径| |sections.lines.section_last_left_index|int|| |sections.lines.section_last_right_index|int|| |sections.lines.section_left_index|int|文件变更之前所在行数| |sections.lines.section_right_index|int|文件变更之后所在行数(即:页面编辑器开始显示的行数)| |sections.lines.section_left_hunk_size|int|文件变更之前的行数| |sections.lines.section_right_hunk_size|int|文件变更之后的行数(及当前页面编辑器显示的总行数)| |is_incomplete|bool|是否不完整| |is_incomplete_line_too_long|bool|文件是否不完整是因为太长了| |is_protected|bool|文件是否被保护| > 单个文件返回的JSON示例: ```json { "name": "README.md", "oldname": "README.md", "addition": 1, "deletion": 2, "type": 2, "is_created": false, "is_deleted": false, "is_bin": false, "is_lfs_file": false, "is_renamed": false, "is_ambiguous": false, "is_submodule": false, "sections": [ { "file_name": "README.md", "name": "", "lines": [ { "left_index": 0, "right_index": 0, "match": 0, "type": 4, "content": "@@ -1,2 +1 @@", "section_path": "README.md", "section_last_left_index": 0, "section_last_right_index": 0, "section_left_index": 1, "section_right_index": 1, "section_left_hunk_size": 2, "section_right_hunk_size": 0 }, { "left_index": 1, "right_index": 0, "match": 3, "type": 3, "content": "-# ceshi_commit" }, { "left_index": 2, "right_index": 0, "match": -1, "type": 3, "content": "-" }, { "left_index": 0, "right_index": 1, "match": 1, "type": 2, "content": "+adsa" } ] }, { "file_name": "README.md", "name": "", "lines": [ { "left_index": 0, "right_index": 0, "match": 0, "type": 4, "content": " ", "section_path": "README.md", "section_last_left_index": 0, "section_last_right_index": 1, "section_left_index": 3, "section_right_index": 2, "section_left_hunk_size": 0, "section_right_hunk_size": 0 } ] } ], "is_incomplete": false, "is_incomplete_line_too_long": false, "is_protected": false } ```