Merge branch 'develop' into dev_trustie_server

This commit is contained in:
jasder 2021-10-15 16:09:48 +08:00
commit 4ebb6a5e74
13 changed files with 1569 additions and 27 deletions

View File

@ -1,4 +1,35 @@
# Changelog
## [v3.2.0](https://forgeplus.trustie.net/projects/jasder/forgeplus/releases) - 2021-06-09
### ENHANCEMENTS
* ADD 集成邮件和平台站内信等通知系统
* Fix 代码库二级页面-优化文件子目录浏览功能(#50388)
* Fix 代码库二级页面-优化commit提交详情页页面排版及数据显示(#50372)
* Fix 代码库二级页面-优化commit提交信息列表页加载方式和数据排序功能(#50348)
* Fix 代码库二级页面-优化创建发行版功能(#50346)
* Fix 代码库二级页面-优化标签列表页功能(#50344)
* Fix 代码库二级页面-优化发行版本列表页功能(#50345)
* Fix 代码库二级页面-优化分支列表页功能(#50343)
* Fix 其他问题优化(#51581) (#51343) (#51108)
---
### BUGFIXES
* Fix 发行版—标签跳转链接错误(#51666)
* Fix 文件预览报错(#51660)
* Fix 标签创建时间显示错误(#51658)
* Fix 分支列表中头像显示问题(#51656)
* Fix 文本信息过长(#51630) (#51626)
* Fix 版本库中附件下载400(#51625)
* Fix loading页面优化(#51588)
* Fix 提交详情页面优化(#51577)
* Fix 修复易修复制功能(#51569)
* Fix 修复新建发行版用户信息显示错误的问题(#51665)
* Fix 修复查看文件详细信息报错的问题(#51561)
* Fix 修复提交记录中时间显示格式问题(#51526)
* Fix 组织下项目更加更新时间倒序排序(#50833)
## [v3.1.0](https://forgeplus.trustie.net/projects/jasder/forgeplus/releases) - 2021-06-09
* ENHANCEMENTS

View File

@ -24,7 +24,7 @@ class CompareController < ApplicationController
@exist_pullrequest = @project.pull_requests.where(is_original: false, head: @base, base: @head, status: 0).take
end
if @exist_pullrequest.present?
return -2, "在这些分支之间的合并请求已存在:<a href='/#{@owner.login}/#{@project.identifier}/pulls/#{@exist_pullrequest.id}/Messagecount'>#{@exist_pullrequest.try(:title)}</a>"
return -2, "在这些分支之间的合并请求已存在:<a href='/#{@owner.login}/#{@project.identifier}/pulls/#{@exist_pullrequest.id}'>#{@exist_pullrequest.try(:title)}</a>"
else
if @compare_result["Commits"].blank? && @compare_result["Diff"].blank?
return -2, "分支内容相同,无需创建合并请求"

View File

@ -216,6 +216,12 @@ class IssuesController < ApplicationController
if @issue.previous_changes[:due_date].present?
previous_changes.merge!(due_date: [@issue.previous_changes[:due_date][0].to_s, @issue.previous_changes[:due_date][1].to_s])
end
if @issue.previous_changes[:status_id].present? && @issue.previous_changes[:status_id][1] == 5
@issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: ProjectTrend::CLOSE)
end
if @issue.previous_changes[:status_id].present? && @issue.previous_changes[:status_id][0] == 5
@issue.project_trends.where(action_type: ProjectTrend::CLOSE).destroy_all
end
SendTemplateMessageJob.perform_later('IssueChanged', current_user.id, @issue&.id, previous_changes)
SendTemplateMessageJob.perform_later('IssueAssigned', current_user.id, @issue&.id) if @issue.previous_changes[:assigned_to_id].present?
end
@ -338,6 +344,12 @@ class IssuesController < ApplicationController
if i.previous_changes[:due_date].present?
previous_changes.merge!(due_date: [i.previous_changes[:due_date][0].to_s, i.previous_changes[:due_date][1].to_s])
end
if i.previous_changes[:status_id].present? && i.previous_changes[:status_id][1] == 5
i.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: ProjectTrend::CLOSE)
end
if i.previous_changes[:status_id].present? && i.previous_changes[:status_id][0] == 5
i.project_trends.where(action_type: ProjectTrend::CLOSE).destroy_all
end
SendTemplateMessageJob.perform_later('IssueChanged', current_user.id, i&.id, previous_changes)
SendTemplateMessageJob.perform_later('IssueAssigned', current_user.id, i&.id) if i.previous_changes[:assigned_to_id].present?
end

View File

@ -3,7 +3,7 @@ class ProjectTrendsController < ApplicationController
before_action :check_project_public
def index
project_trends = @project.project_trends.includes(:user, trend: :user)
project_trends = @project.project_trends.preload(:user, trend: :user)
check_time = params[:time] #时间的筛选
check_type = params[:type] #动态类型的筛选,目前已知的有 Issue, PullRequest, Version
@ -14,20 +14,25 @@ class ProjectTrendsController < ApplicationController
project_trends = project_trends.where("created_at between ? and ?",(Time.now.beginning_of_day - check_time.days), Time.now.end_of_day)
end
@project_open_issues_count = project_trends.where(trend_type: "Issue", action_type: "create").size
@project_close_issues_count = project_trends.where(trend_type: "Issue", action_type: "close").size
@project_issues_count = @project_open_issues_count + @project_close_issues_count
@project_pr_count = project_trends.where(trend_type: "PullRequest", action_type: "close").size
@project_new_pr_count = project_trends.where(trend_type: "PullRequest", action_type: "create").size
@project_pr_all_count = @project_pr_count + @project_new_pr_count
@project_issues_count = project_trends.where(trend_type: "Issue", action_type: "create").size
@project_open_issues_count = @project_issues_count - @project_close_issues_count
@project_pr_count = project_trends.where(trend_type: "PullRequest", action_type: ["close", "merge"]).size
@project_pr_all_count = project_trends.where(trend_type: "PullRequest", action_type: "create").size
@project_new_pr_count = @project_pr_all_count - @project_pr_count
if check_type.present?
project_trends = project_trends.where(trend_type: check_type.to_s.strip)
end
if check_status.present?
project_trends = project_trends.where(action_type: check_status.to_s.strip)
if check_status == "delay" || check_status == "close"
project_trends = project_trends.where(action_type: ["close", "merge"])
else
project_trends = project_trends.where(action_type: ["create"]).where.not(trend_id: project_trends.where(action_type: ["close", "merge"]).pluck(:trend_id))
end
else
project_trends = project_trends.where(action_type: "create")
end
project_trends = project_trends.order("created_at desc")

View File

@ -127,9 +127,9 @@ class ProjectsController < ApplicationController
Gitea::Repository::UpdateService.call(@owner, @project.identifier, gitea_params)
else
validate_params = project_params.slice(:name, :description,
:project_category_id, :project_language_id, :private)
:project_category_id, :project_language_id, :private, :identifier)
Projects::UpdateForm.new(validate_params).validate!
Projects::UpdateForm.new(validate_params.merge(user_id: @project.user_id)).validate!
private = @project.forked_from_project.present? ? !@project.forked_from_project.is_public : params[:private] || false
@ -139,12 +139,11 @@ class ProjectsController < ApplicationController
gitea_params = {
private: private,
default_branch: @project.default_branch,
website: @project.website
website: @project.website,
name: @project.identifier
}
if [true, false].include? private
Gitea::Repository::UpdateService.call(@owner, @project.identifier, gitea_params)
@project.repository.update_column(:hidden, private)
end
gitea_repo = Gitea::Repository::UpdateService.call(@owner, @project&.repository&.identifier, gitea_params)
@project.repository.update_attributes({hidden: gitea_repo["private"], identifier: gitea_repo["name"]})
end
SendTemplateMessageJob.perform_later('ProjectSettingChanged', current_user.id, @project&.id, @project.previous_changes.slice(:name, :description, :project_category_id, :project_language_id, :is_public))
end
@ -229,7 +228,7 @@ class ProjectsController < ApplicationController
private
def project_params
params.permit(:user_id, :name, :description, :repository_name, :website, :lesson_url, :default_branch,
params.permit(:user_id, :name, :description, :repository_name, :website, :lesson_url, :default_branch, :identifier,
:project_category_id, :project_language_id, :license_id, :ignore_id, :private)
end

View File

@ -69,9 +69,9 @@ class PullRequestsController < ApplicationController
end
def edit
@fork_project_user_name = @project&.fork_project&.owner.try(:show_real_name)
@fork_project_user = @project&.fork_project&.owner.try(:login)
@fork_project_identifier = @project&.fork_project&.repository.try(:identifier)
@fork_project_user_name = @pull_request&.fork_project&.owner.try(:show_real_name)
@fork_project_user = @pull_request&.fork_project&.owner.try(:login)
@fork_project_identifier = @pull_request&.fork_project&.repository.try(:identifier)
end
def update
@ -130,6 +130,7 @@ class PullRequestsController < ApplicationController
begin
colsed = PullRequests::CloseService.call(@owner, @repository, @pull_request, current_user)
if colsed === true
@pull_request.project_trends.create!(user: current_user, project: @project,action_type: ProjectTrend::CLOSE)
SendTemplateMessageJob.perform_later('PullRequestClosed', current_user.id, @pull_request.id)
normal_status(1, "已拒绝")
else
@ -171,7 +172,8 @@ class PullRequestsController < ApplicationController
end
if success_condition && @pull_request.merge!
@pull_request.project_trend_status!
# @pull_request.project_trend_status!
@pull_request.project_trends.create!(user: current_user, project: @project,action_type: ProjectTrend::MERGE)
@issue&.custom_journal_detail("merge", "", "该合并请求已被合并", current_user&.id)
SendTemplateMessageJob.perform_later('PullRequestMerged', current_user.id, @pull_request.id)
normal_status(1, "合并成功")

View File

@ -1 +1,502 @@
# 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|commits 提交时间距当前时间的时间值|
|-- message |string|commit说明信息|
|-- sha |string|commits 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|commits 提交时间距当前时间的时间值|
|-- message |string|commit说明信息|
|-- sha |string|commits 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
}
]
}
```

View File

@ -1,11 +1,12 @@
class Projects::UpdateForm < BaseForm
attr_accessor :name, :description, :project_category_id, :project_language_id, :private
attr_accessor :name, :description, :project_category_id, :project_language_id, :private, :identifier, :user_id
validates :name, presence: true
validates :name, length: { maximum: 50 }
validates :description, length: { maximum: 200 }
validate do
check_project_category(project_category_id)
check_project_language(project_language_id)
check_repository_name(user_id, identifier) unless identifier.blank?
end
end

View File

@ -20,7 +20,8 @@
class ProjectTrend < ApplicationRecord
CLOSE = 'close'
CREATE = 'create'
MERGE = 'merge'
belongs_to :project
belongs_to :trend, polymorphic: true, optional: true
belongs_to :user

View File

@ -19,7 +19,8 @@ class Gitea::Repository::UpdateService < Gitea::ClientService
end
def call
patch(url, data_params)
response = patch(url, data_params)
render_200_response(response)
end
private

View File

@ -3,8 +3,8 @@ json.project_name @project.name
json.identifier @project.identifier
json.project_identifier @project.identifier
json.pr_time time_from_now(@pull_request.updated_at)
json.commits_count @pull_request.commits_count
json.files_count @pull_request.files_count
json.commits_count @gitea_pull["commit_num"]
json.files_count @gitea_pull["changed_files"]
json.comments_count @issue.journals.parent_journals.size
json.comments_total_count @issue.get_journals_size

View File

@ -0,0 +1,30 @@
namespace :refactor_project_trend do
desc "refactor project trend data record"
task issue_and_pull_request: :environment do
puts "========DELETE all old data begin========"
old_data_count = ProjectTrend.where(trend_type: ["PullRequest","Issue"]).destroy_all.size
puts "========DELETE all old data #{old_data_count}========"
puts "========DELETE all old data end========"
puts "========CREATE new issue data begin========"
issue_count = 0
Issue.issue_issue.find_each do |issue|
issue_count += 1
issue.project_trends.create(user_id: issue.assigned_to_id || issue.author_id, project_id: issue.project_id, action_type: ProjectTrend::CLOSE, created_at: issue.updated_on) if issue.status_id == 5
issue.project_trends.create(user_id: issue.author_id, project_id: issue.project_id, action_type: ProjectTrend::CREATE, created_at: issue.created_on)
end
puts "========CREATE new issue data #{issue_count}========"
puts "========CREATE new issue data end========"
puts "========CREATE new pull_request data begin========"
pull_request_count = 0
PullRequest.find_each do |pull_request|
pull_request_count += 1
pull_request.project_trends.create(user_id: pull_request.user_id, project_id: pull_request.project_id, action_type: ProjectTrend::MERGE, created_at: pull_request.updated_at) if pull_request.status == PullRequest::MERGED
pull_request.project_trends.create(user_id: pull_request.user_id, project_id: pull_request.project_id, action_type: ProjectTrend::CLOSE, created_at: pull_request.updated_at) if pull_request.status == PullRequest::CLOSED
pull_request.project_trends.create(user_id: pull_request.user_id, project_id: pull_request.project_id, action_type: ProjectTrend::CREATE, created_at: pull_request.created_at)
end
puts "========CREATE new pull_request data #{pull_request_count}========"
puts "========CREATE new pull_request data end========"
end
end

View File

@ -533,6 +533,23 @@
</li>
<li>
<a href="#pulls" class="toc-h1 toc-link" data-title="Pulls">Pulls</a>
<ul class="toc-list-h2">
<li>
<a href="#get-a-pull-request" class="toc-h2 toc-link" data-title="Get a pull request">Get a pull request</a>
</li>
<li>
<a href="#pull-request" class="toc-h2 toc-link" data-title="获取pull request文件列表">获取pull request文件列表</a>
</li>
<li>
<a href="#pull-request-commits" class="toc-h2 toc-link" data-title="获取pull request的commits列表">获取pull request的commits列表</a>
</li>
<li>
<a href="#compare-two-commits" class="toc-h2 toc-link" data-title="Compare two commits">Compare two commits</a>
</li>
<li>
<a href="#list-pull-requests" class="toc-h2 toc-link" data-title="List pull requests">List pull requests</a>
</li>
</ul>
</li>
<li>
<a href="#issues" class="toc-h1 toc-link" data-title="Issues">Issues</a>
@ -8909,7 +8926,949 @@ http://localhost:3000/api/yystopf/ceshi/webhooks/3/test.json
<aside class="success">
Success Data.
</aside>
<h1 id='pulls'>Pulls</h1><h1 id='issues'>Issues</h1><h1 id='organizations'>Organizations</h1><h1 id='teams'>Teams</h1><h1 id='errors'>Errors</h1>
<h1 id='pulls'>Pulls</h1><h2 id='get-a-pull-request'>Get a pull request</h2>
<p>获取合并请求详情接口</p>
<blockquote>
<p>示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> GET http://localhost:3000/api/Jasder/gitlink/pulls/88.json
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/Jasder/gitlink/pulls/88.json</span><span class="dl">'</span><span class="p">)</span>
</code></pre></div><h3 id='http'>HTTP 请求</h3>
<p><code>GET /api/:owner/:repo/pulls/:id.json</code></p>
<h3 id='2eb6f47757'>请求参数:</h3>
<table><thead>
<tr>
<th>参数</th>
<th>必选</th>
<th>默认</th>
<th>类型</th>
<th>字段说明</th>
</tr>
</thead><tbody>
<tr>
<td>owner</td>
<td></td>
<td></td>
<td>string</td>
<td>用户登录名</td>
</tr>
<tr>
<td>repo</td>
<td></td>
<td></td>
<td>string</td>
<td>项目标识identifier</td>
</tr>
<tr>
<td>id</td>
<td></td>
<td></td>
<td>integer</td>
<td>pull id值</td>
</tr>
</tbody></table>
<blockquote>
<p>返回的JSON示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
</span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"响应成功"</span><span class="p">,</span><span class="w">
</span><span class="nl">"project_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Gitlink"</span><span class="p">,</span><span class="w">
</span><span class="nl">"identifier"</span><span class="p">:</span><span class="w"> </span><span class="s2">"forgeplus"</span><span class="p">,</span><span class="w">
</span><span class="nl">"project_identifier"</span><span class="p">:</span><span class="w"> </span><span class="s2">"forgeplus"</span><span class="p">,</span><span class="w">
</span><span class="nl">"pr_time"</span><span class="p">:</span><span class="w"> </span><span class="s2">"52分钟前"</span><span class="p">,</span><span class="w">
</span><span class="nl">"commits_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">229</span><span class="p">,</span><span class="w">
</span><span class="nl">"files_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">328</span><span class="p">,</span><span class="w">
</span><span class="nl">"comments_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"comments_total_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"pull_request"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1189</span><span class="p">,</span><span class="w">
</span><span class="nl">"base"</span><span class="p">:</span><span class="w"> </span><span class="s2">"master"</span><span class="p">,</span><span class="w">
</span><span class="nl">"head"</span><span class="p">:</span><span class="w"> </span><span class="s2">"develop"</span><span class="p">,</span><span class="w">
</span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"fork_project_id"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"is_original"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"pull_request_staus"</span><span class="p">:</span><span class="w"> </span><span class="s2">"open"</span><span class="p">,</span><span class="w">
</span><span class="nl">"fork_project_user"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"create_user"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jasder"</span><span class="p">,</span><span class="w">
</span><span class="nl">"mergeable"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"open"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"issue"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">51888</span><span class="p">,</span><span class="w">
</span><span class="nl">"subject"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FIx release v3.2.0"</span><span class="p">,</span><span class="w">
</span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"is_private"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"branch_name"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"project_author_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Gitlink"</span><span class="p">,</span><span class="w">
</span><span class="nl">"closed_on"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
</span><span class="nl">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2021-10-12 15:51"</span><span class="p">,</span><span class="w">
</span><span class="nl">"assign_user_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"victor"</span><span class="p">,</span><span class="w">
</span><span class="nl">"assign_user_login"</span><span class="p">:</span><span class="w"> </span><span class="s2">"moshenglv"</span><span class="p">,</span><span class="w">
</span><span class="nl">"author_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"段甲生"</span><span class="p">,</span><span class="w">
</span><span class="nl">"author_login"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jasder"</span><span class="p">,</span><span class="w">
</span><span class="nl">"author_picture"</span><span class="p">:</span><span class="w"> </span><span class="s2">"images/avatars/User/36480?t=1615520120"</span><span class="p">,</span><span class="w">
</span><span class="nl">"issue_status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"新增"</span><span class="p">,</span><span class="w">
</span><span class="nl">"priority"</span><span class="p">:</span><span class="w"> </span><span class="s2">"正常"</span><span class="p">,</span><span class="w">
</span><span class="nl">"version"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"issue_tags"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"conflict_files"</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='pull-request'>获取pull request文件列表</h2>
<p>获取pull request文件列表</p>
<blockquote>
<p>示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> GET <span class="se">\</span>
http://localhost:3000/api/Jason/gitlink/pulls/1/files.json
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/jasder/gitlink/pulls/1/files.json</span><span class="dl">'</span><span class="p">)</span>
</code></pre></div><h3 id='http-2'>HTTP 请求</h3>
<p><code>GET /api/:owner/:repo/pulls/:id/files.json</code></p>
<h3 id='2eb6f47757-2'>请求参数:</h3>
<table><thead>
<tr>
<th>参数名</th>
<th>必选</th>
<th>类型</th>
<th>说明</th>
</tr>
</thead><tbody>
<tr>
<td>owner</td>
<td></td>
<td>string</td>
<td>用户登录名</td>
</tr>
<tr>
<td>repo</td>
<td></td>
<td>string</td>
<td>project&#39;s identifier</td>
</tr>
<tr>
<td>id</td>
<td></td>
<td>int</td>
<td>pull request&#39;s id</td>
</tr>
</tbody></table>
<h3 id='7447e4874e'>返回字段说明:</h3>
<table><thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>字段说明</th>
</tr>
</thead><tbody>
<tr>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>files_count</td>
<td>int</td>
<td>文件更改的总数量</td>
</tr>
<tr>
<td>total_addition</td>
<td>int</td>
<td>添加代码总行数</td>
</tr>
<tr>
<td>total_deletion</td>
<td>int</td>
<td>删除代码总行数</td>
</tr>
<tr>
<td>files</td>
<td>array</td>
<td></td>
</tr>
<tr>
<td>-- sha</td>
<td>string</td>
<td>commit&#39;s sha value</td>
</tr>
<tr>
<td>-- name</td>
<td>string</td>
<td>当前文件名</td>
</tr>
<tr>
<td>-- old_name</td>
<td>string</td>
<td>修改之前的文件名称,与name相同的话说明文件名未更改</td>
</tr>
<tr>
<td>-- addition</td>
<td>int</td>
<td>文件添加的行数</td>
</tr>
<tr>
<td>-- deletion</td>
<td>int</td>
<td>文件删除的行数</td>
</tr>
<tr>
<td>-- type</td>
<td>int</td>
<td>文件类型, 1: 表示该文件只添加了内容2: 表示该文件内容有修改, 3: 表示文件被删除或者改文件只删除了内容</td>
</tr>
<tr>
<td>-- isCreated</td>
<td>boolean</td>
<td>当前文件是否为新增文件, true: 是, false: 否</td>
</tr>
<tr>
<td>-- isDeleted</td>
<td>boolean</td>
<td>当前文件是否被删除, true: 是false: 否</td>
</tr>
<tr>
<td>-- isBin</td>
<td>boolean</td>
<td>当前文件是否为二进制文件true: 是false: 否</td>
</tr>
<tr>
<td>-- isLFSFile</td>
<td>boolean</td>
<td>当前文件是否为LFS文件true: 是false: 否</td>
</tr>
<tr>
<td>-- isRenamed</td>
<td>boolean</td>
<td>当前文件是否被重命名true: 是false: 否</td>
</tr>
<tr>
<td>-- sections</td>
<td>array</td>
<td></td>
</tr>
<tr>
<td>---- fileName</td>
<td>string</td>
<td>文件名称</td>
</tr>
<tr>
<td>---- lines</td>
<td>array</td>
<td></td>
</tr>
<tr>
<td>------ leftIdx</td>
<td>string</td>
<td>文件变动之前所在行数</td>
</tr>
<tr>
<td>------ rightIdx</td>
<td>string</td>
<td>文件更改后所在行数</td>
</tr>
<tr>
<td>------ type</td>
<td>string</td>
<td>文件变更类型1: 新增2: 修改, 3: 删除, 4: diff统计信息</td>
</tr>
<tr>
<td>------ content</td>
<td>string</td>
<td>文件变更的内容</td>
</tr>
<tr>
<td>------ sectionInfo</td>
<td>object</td>
<td></td>
</tr>
<tr>
<td>-------- path</td>
<td>string</td>
<td>文件相对仓库的路径</td>
</tr>
<tr>
<td>-------- lastLeftIdx</td>
<td>int</td>
<td></td>
</tr>
<tr>
<td>-------- lastRightIdx</td>
<td>int</td>
<td></td>
</tr>
<tr>
<td>-------- leftHunkSize</td>
<td>int</td>
<td>文件变更之前的行数</td>
</tr>
<tr>
<td>-------- rightHunkSize</td>
<td>int</td>
<td>文件变更之后的行数(及当前页面编辑器显示的总行数)</td>
</tr>
<tr>
<td>-------- leftIdx</td>
<td>int</td>
<td>文件变更之前所在行数</td>
</tr>
<tr>
<td>-------- rightIdx</td>
<td>int</td>
<td>文件变更之后所在行数(即:页面编辑器开始显示的行数)</td>
</tr>
</tbody></table>
<blockquote>
<p>返回的JSON示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
</span><span class="nl">"files_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w">
</span><span class="nl">"total_addition"</span><span class="p">:</span><span class="w"> </span><span class="mi">447</span><span class="p">,</span><span class="w">
</span><span class="nl">"total_deletion"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"files"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"sha"</span><span class="p">:</span><span class="w"> </span><span class="s2">"xefenisnii"</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"文件.txt"</span><span class="p">,</span><span class="w">
</span><span class="nl">"old_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"文件.txt"</span><span class="p">,</span><span class="w">
</span><span class="nl">"index"</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w">
</span><span class="nl">"addition"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="nl">"deletion"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"isCreated"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"isDeleted"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"isBin"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"isLFSFile"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"isRenamed"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"isSubmodule"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"sections"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"fileName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"文件.txt"</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
</span><span class="nl">"lines"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"leftIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"rightIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
</span><span class="nl">"content"</span><span class="p">:</span><span class="w"> </span><span class="s2">"@@ -0,0 +1,2 @@"</span><span class="p">,</span><span class="w">
</span><span class="nl">"sectionInfo"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"lastLeftIdx"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"lastRightIdx"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"leftIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"rightIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"leftHunkSize"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"rightHunkSize"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"leftIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"rightIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="nl">"content"</span><span class="p">:</span><span class="w"> </span><span class="s2">"+用例图一致性更新"</span><span class="p">,</span><span class="w">
</span><span class="nl">"sectionInfo"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"leftIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"rightIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="nl">"content"</span><span class="p">:</span><span class="w"> </span><span class="s2">"+工程文件直接上传会有文件缺失,现在压缩后上传"</span><span class="p">,</span><span class="w">
</span><span class="nl">"sectionInfo"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='pull-request-commits'>获取pull request的commits列表</h2>
<p>获取pull request的commits列表</p>
<blockquote>
<p>示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> GET http://localhost:3000/api/jasder/jasder_test/pulls/1/commits.json
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/jasder/jasder_test/pulls/1/commits.json</span><span class="dl">'</span><span class="p">)</span>
</code></pre></div><h3 id='http-3'>HTTP 请求</h3>
<p><code>GET /api/:owner/:repo/pulls/:id/commits.json</code></p>
<h3 id='2eb6f47757-3'>请求参数:</h3>
<table><thead>
<tr>
<th>参数名</th>
<th>必选</th>
<th>类型</th>
<th>说明</th>
</tr>
</thead><tbody>
<tr>
<td>owner</td>
<td></td>
<td>string</td>
<td>用户登录名</td>
</tr>
<tr>
<td>repo</td>
<td></td>
<td>string</td>
<td>project&#39;s identifier</td>
</tr>
<tr>
<td>id</td>
<td></td>
<td>int</td>
<td>pull request&#39;s id</td>
</tr>
</tbody></table>
<h3 id='7447e4874e-2'>返回字段说明:</h3>
<table><thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>字段说明</th>
</tr>
</thead><tbody>
<tr>
<td>commits_count</td>
<td>int</td>
<td>commits总数量</td>
</tr>
<tr>
<td>commits</td>
<td>array</td>
<td></td>
</tr>
<tr>
<td>-- author</td>
<td>object</td>
<td>项目作者</td>
</tr>
<tr>
<td>---- login</td>
<td>string</td>
<td>用户login</td>
</tr>
<tr>
<td>---- name</td>
<td>string</td>
<td>用户姓名</td>
</tr>
<tr>
<td>---- image_url</td>
<td>string</td>
<td>用户头像</td>
</tr>
<tr>
<td>-- committer</td>
<td>object</td>
<td>commit提交用户</td>
</tr>
<tr>
<td>---- login</td>
<td>string</td>
<td>用户login</td>
</tr>
<tr>
<td>---- name</td>
<td>string</td>
<td>用户姓名</td>
</tr>
<tr>
<td>---- image_url</td>
<td>string</td>
<td>用户头像</td>
</tr>
<tr>
<td>-- timestamp</td>
<td>int</td>
<td>commit的unix时间戳</td>
</tr>
<tr>
<td>-- time_from_now</td>
<td>string</td>
<td>commits 提交时间距当前时间的时间值</td>
</tr>
<tr>
<td>-- message</td>
<td>string</td>
<td>commit说明信息</td>
</tr>
<tr>
<td>-- sha</td>
<td>string</td>
<td>commits sha值</td>
</tr>
</tbody></table>
<blockquote>
<p>返回的JSON示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
</span><span class="nl">"commits_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"commits"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">36480</span><span class="p">,</span><span class="w">
</span><span class="nl">"login"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jasder"</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"段甲生"</span><span class="p">,</span><span class="w">
</span><span class="nl">"image_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"avatars/User/b"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"committer"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">36480</span><span class="p">,</span><span class="w">
</span><span class="nl">"login"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jasder"</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"段甲生"</span><span class="p">,</span><span class="w">
</span><span class="nl">"image_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"avatars/User/b"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"timestamp"</span><span class="p">:</span><span class="w"> </span><span class="mi">1604382982</span><span class="p">,</span><span class="w">
</span><span class="nl">"time_from_now"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3小时前"</span><span class="p">,</span><span class="w">
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"add some file</span><span class="se">\n</span><span class="s2">* Add the tag list page to the release page</span><span class="se">\n</span><span class="s2">* Apply suggestions from code review</span><span class="se">\n</span><span class="s2">* Add the tags list view</span><span class="se">\n</span><span class="s2">* Add the delete tag way on ui</span><span class="se">\n</span><span class="s2">* Not delete tag and clear message when delete a release</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span><span class="w">
</span><span class="nl">"sha"</span><span class="p">:</span><span class="w"> </span><span class="s2">"8f5faee0d3b3be1b8063e84da0c79dd75327b968"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='compare-two-commits'>Compare two commits</h2>
<p>Compare two commits</p>
<blockquote>
<p>示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> GET <span class="se">\</span>
http://localhost:3000/api/Jason/test-txt/compare/master...develop
curl <span class="nt">-X</span> GET <span class="se">\</span>
http://localhost:3000/api/Jason/test-txt/compare/master...Jason/test-txt:develop
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/Jason/test-txt/compare/master...Jason/test-txt:develop</span><span class="dl">'</span><span class="p">)</span>
</code></pre></div><h3 id='http-4'>HTTP 请求</h3>
<p><code>GET /api/:owner/:repo/compare/{base}...{head}.json</code></p>
<h3 id='2eb6f47757-4'>请求参数:</h3>
<table><thead>
<tr>
<th>参数名</th>
<th>必选</th>
<th>类型</th>
<th>说明</th>
</tr>
</thead><tbody>
<tr>
<td>owner</td>
<td></td>
<td>string</td>
<td>用户登录名</td>
</tr>
<tr>
<td>repo</td>
<td></td>
<td>string</td>
<td>project&#39;s identifier</td>
</tr>
<tr>
<td>base</td>
<td></td>
<td>string</td>
<td>pull request&#39;s id</td>
</tr>
<tr>
<td>head</td>
<td></td>
<td>string</td>
<td>pull request&#39;s id</td>
</tr>
</tbody></table>
<h3 id='7447e4874e-3'>返回字段说明:</h3>
<table><thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>字段说明</th>
</tr>
</thead><tbody>
<tr>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>commits_count</td>
<td>int</td>
<td>commits总数量</td>
</tr>
<tr>
<td>commits</td>
<td>array</td>
<td></td>
</tr>
<tr>
<td>-- author</td>
<td>object</td>
<td>项目作者</td>
</tr>
<tr>
<td>---- login</td>
<td>string</td>
<td>用户login</td>
</tr>
<tr>
<td>---- name</td>
<td>string</td>
<td>用户姓名</td>
</tr>
<tr>
<td>---- image_url</td>
<td>string</td>
<td>用户头像</td>
</tr>
<tr>
<td>-- committer</td>
<td>object</td>
<td>commit提交用户</td>
</tr>
<tr>
<td>---- login</td>
<td>string</td>
<td>用户login</td>
</tr>
<tr>
<td>---- name</td>
<td>string</td>
<td>用户姓名</td>
</tr>
<tr>
<td>---- image_url</td>
<td>string</td>
<td>用户头像</td>
</tr>
<tr>
<td>-- timestamp</td>
<td>int</td>
<td>commit的unix时间戳</td>
</tr>
<tr>
<td>-- time_from_now</td>
<td>string</td>
<td>commits 提交时间距当前时间的时间值</td>
</tr>
<tr>
<td>-- message</td>
<td>string</td>
<td>commit说明信息</td>
</tr>
<tr>
<td>-- sha</td>
<td>string</td>
<td>commits sha值</td>
</tr>
<tr>
<td>diff</td>
<td>object</td>
<td></td>
</tr>
<tr>
<td>-- files_count</td>
<td>int</td>
<td>文件更改的总数量</td>
</tr>
<tr>
<td>-- total_addition</td>
<td>int</td>
<td>添加代码总行数</td>
</tr>
<tr>
<td>-- total_deletion</td>
<td>int</td>
<td>删除代码总行数</td>
</tr>
<tr>
<td>-- files</td>
<td>Array</td>
<td></td>
</tr>
<tr>
<td>-- sha</td>
<td>string</td>
<td>commit&#39;s sha</td>
</tr>
<tr>
<td>-- name</td>
<td>string</td>
<td>当前文件名</td>
</tr>
<tr>
<td>-- old_name</td>
<td>string</td>
<td>修改之前的文件名称,与name相同的话说明文件名未更改</td>
</tr>
<tr>
<td>-- addition</td>
<td>int</td>
<td>文件添加的行数</td>
</tr>
<tr>
<td>-- deletion</td>
<td>int</td>
<td>文件删除的行数</td>
</tr>
<tr>
<td>-- type</td>
<td>int</td>
<td>文件类型, 1: 表示该文件只添加了内容2: 表示该文件内容有修改, 3: 表示文件被删除或者改文件只删除了内容</td>
</tr>
<tr>
<td>-- isCreated</td>
<td>boolean</td>
<td>当前文件是否为新增文件, true: 是, false: 否</td>
</tr>
<tr>
<td>-- isDeleted</td>
<td>boolean</td>
<td>当前文件是否被删除, true: 是false: 否</td>
</tr>
<tr>
<td>-- isBin</td>
<td>boolean</td>
<td>当前文件是否为二进制文件true: 是false: 否</td>
</tr>
<tr>
<td>-- isLFSFile</td>
<td>boolean</td>
<td>当前文件是否为LFS文件true: 是false: 否</td>
</tr>
<tr>
<td>-- isRenamed</td>
<td>boolean</td>
<td>当前文件是否被重命名true: 是false: 否</td>
</tr>
<tr>
<td>-- sections</td>
<td>array</td>
<td></td>
</tr>
<tr>
<td>---- fileName</td>
<td>string</td>
<td>文件名称</td>
</tr>
<tr>
<td>---- lines</td>
<td>array</td>
<td></td>
</tr>
<tr>
<td>------ leftIdx</td>
<td>string</td>
<td>文件变动之前所在行数</td>
</tr>
<tr>
<td>------ rightIdx</td>
<td>string</td>
<td>文件更改后所在行数</td>
</tr>
<tr>
<td>------ type</td>
<td>string</td>
<td>文件变更类型1: 内容未改动2: 添加, 3: 删除, 4: diff统计信息</td>
</tr>
<tr>
<td>------ content</td>
<td>string</td>
<td>文件变更的内容</td>
</tr>
<tr>
<td>------ sectionInfo</td>
<td>object</td>
<td></td>
</tr>
<tr>
<td>-------- path</td>
<td>string</td>
<td>文件相对仓库的路径</td>
</tr>
<tr>
<td>-------- lastLeftIdx</td>
<td>int</td>
<td></td>
</tr>
<tr>
<td>-------- lastRightIdx</td>
<td>int</td>
<td></td>
</tr>
<tr>
<td>-------- leftHunkSize</td>
<td>int</td>
<td>文件变更之前的行数</td>
</tr>
<tr>
<td>-------- rightHunkSize</td>
<td>int</td>
<td>文件变更之后的行数(及当前页面编辑器显示的总行数)</td>
</tr>
<tr>
<td>-------- leftIdx</td>
<td>int</td>
<td>文件变更之前所在行数</td>
</tr>
<tr>
<td>-------- rightIdx</td>
<td>int</td>
<td>文件变更之后所在行数</td>
</tr>
</tbody></table>
<blockquote>
<p>返回的JSON示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
</span><span class="nl">"commits_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"commits"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">36480</span><span class="p">,</span><span class="w">
</span><span class="nl">"login"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jasder"</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"段甲生"</span><span class="p">,</span><span class="w">
</span><span class="nl">"image_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"avatars/User/b"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"committer"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">36480</span><span class="p">,</span><span class="w">
</span><span class="nl">"login"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jasder"</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"段甲生"</span><span class="p">,</span><span class="w">
</span><span class="nl">"image_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"avatars/User/b"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"timestamp"</span><span class="p">:</span><span class="w"> </span><span class="mi">1604382982</span><span class="p">,</span><span class="w">
</span><span class="nl">"time_from_now"</span><span class="p">:</span><span class="w"> </span><span class="s2">"4小时前"</span><span class="p">,</span><span class="w">
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"add some file</span><span class="se">\n</span><span class="s2">* Add the tag list page to the release page</span><span class="se">\n</span><span class="s2">* Apply suggestions from code review</span><span class="se">\n</span><span class="s2">* Add the tags list view</span><span class="se">\n</span><span class="s2">* Add the delete tag way on ui</span><span class="se">\n</span><span class="s2">* Not delete tag and clear message when delete a release</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span><span class="w">
</span><span class="nl">"sha"</span><span class="p">:</span><span class="w"> </span><span class="s2">"8f5faee0d3b3be1b8063e84da0c79dd75327b968"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="nl">"diff"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"files_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w">
</span><span class="nl">"total_addition"</span><span class="p">:</span><span class="w"> </span><span class="mi">447</span><span class="p">,</span><span class="w">
</span><span class="nl">"total_deletion"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"files"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"build.go"</span><span class="p">,</span><span class="w">
</span><span class="nl">"old_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"build.go"</span><span class="p">,</span><span class="w">
</span><span class="nl">"index"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"addition"</span><span class="p">:</span><span class="w"> </span><span class="mi">33</span><span class="p">,</span><span class="w">
</span><span class="nl">"deletion"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"isCreated"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"isDeleted"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"isBin"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"isLFSFile"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"isRenamed"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"isSubmodule"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"sections"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"fileName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"build.go"</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
</span><span class="nl">"lines"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"leftIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"rightIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
</span><span class="nl">"content"</span><span class="p">:</span><span class="w"> </span><span class="s2">"@@ -0,0 +1,33 @@"</span><span class="p">,</span><span class="w">
</span><span class="nl">"sectionInfo"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"build.go"</span><span class="p">,</span><span class="w">
</span><span class="nl">"lastLeftIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"lastRightIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"leftIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"rightIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"leftHunkSize"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"rightHunkSize"</span><span class="p">:</span><span class="w"> </span><span class="mi">33</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"leftIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"rightIdx"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="nl">"content"</span><span class="p">:</span><span class="w"> </span><span class="s2">"+// Copyright 2020 The Gitea Authors. All rights reserved."</span><span class="p">,</span><span class="w">
</span><span class="nl">"sectionInfo"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h2 id='list-pull-requests'>List pull requests</h2>
<p>获取合并请求列表</p>
<blockquote>
<p>示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> GET http://localhost:3000/api/Jasder/gitlink/pulls.json
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/Jasder/gitlink/pulls.json</span><span class="dl">'</span><span class="p">)</span>
</code></pre></div><h3 id='http-5'>HTTP 请求</h3>
<p><code>GET /api/:owner/:repo/pulls.json</code></p>
<h3 id='2eb6f47757-5'>请求参数:</h3>
<table><thead>
<tr>
<th>参数</th>
<th>必选</th>
<th>默认</th>
<th>类型</th>
<th>字段说明</th>
</tr>
</thead><tbody>
<tr>
<td>owner</td>
<td></td>
<td></td>
<td>string</td>
<td>用户登录名</td>
</tr>
<tr>
<td>repo</td>
<td></td>
<td></td>
<td>string</td>
<td>项目标识identifier</td>
</tr>
</tbody></table>
<blockquote>
<p>返回的JSON示例:</p>
</blockquote>
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
</span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"响应成功"</span><span class="p">,</span><span class="w">
</span><span class="nl">"open_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
</span><span class="nl">"close_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">51</span><span class="p">,</span><span class="w">
</span><span class="nl">"merged_issues_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">123</span><span class="p">,</span><span class="w">
</span><span class="nl">"search_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
</span><span class="nl">"limit"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"user_admin_or_member"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"user_admin_or_developer"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"project_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Gitlink"</span><span class="p">,</span><span class="w">
</span><span class="nl">"project_author_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Gitlink"</span><span class="p">,</span><span class="w">
</span><span class="nl">"issues"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"pull_request_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1189</span><span class="p">,</span><span class="w">
</span><span class="nl">"pull_request_status"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"pull_request_head"</span><span class="p">:</span><span class="w"> </span><span class="s2">"develop"</span><span class="p">,</span><span class="w">
</span><span class="nl">"pull_request_base"</span><span class="p">:</span><span class="w"> </span><span class="s2">"master"</span><span class="p">,</span><span class="w">
</span><span class="nl">"pull_request_staus"</span><span class="p">:</span><span class="w"> </span><span class="s2">"open"</span><span class="p">,</span><span class="w">
</span><span class="nl">"is_original"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"fork_project_id"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"fork_project_identifier"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"fork_project_user"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">51888</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FIx release v3.2.0"</span><span class="p">,</span><span class="w">
</span><span class="nl">"pr_time"</span><span class="p">:</span><span class="w"> </span><span class="s2">"59分钟前"</span><span class="p">,</span><span class="w">
</span><span class="nl">"assign_user_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"victor"</span><span class="p">,</span><span class="w">
</span><span class="nl">"assign_user_login"</span><span class="p">:</span><span class="w"> </span><span class="s2">"moshenglv"</span><span class="p">,</span><span class="w">
</span><span class="nl">"author_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"段甲生"</span><span class="p">,</span><span class="w">
</span><span class="nl">"author_login"</span><span class="p">:</span><span class="w"> </span><span class="s2">"jasder"</span><span class="p">,</span><span class="w">
</span><span class="nl">"avatar_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"images/avatars/User/36480?t=1615520120"</span><span class="p">,</span><span class="w">
</span><span class="nl">"priority"</span><span class="p">:</span><span class="w"> </span><span class="s2">"正常"</span><span class="p">,</span><span class="w">
</span><span class="nl">"version"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
</span><span class="nl">"journals_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"issue_tags"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div><h1 id='issues'>Issues</h1><h1 id='organizations'>Organizations</h1><h1 id='teams'>Teams</h1><h1 id='errors'>Errors</h1>
<aside class="notice">
This error section is stored in a separate file in <code>includes/_errors.md</code>. Slate allows you to optionally separate out your docs into many files...just save them to the <code>includes</code> folder and add them to the top of your <code>index.md</code>'s frontmatter. Files are included in the order listed.
</aside>