| @@ -135,4 +135,4 @@ gem 'doorkeeper' | |||
| gem 'doorkeeper-jwt' | |||
| gem 'gitea-client', '~> 0.9.4' | |||
| gem 'gitea-client', '~> 0.10.2' | |||
| @@ -1,5 +1,10 @@ | |||
| class Api::V1::Projects::CommitsController < Api::V1::BaseController | |||
| before_action :require_public_and_member_above, only: [:diff] | |||
| before_action :require_public_and_member_above, only: [:index, :diff] | |||
| def index | |||
| @result_object = Api::V1::Projects::Commits::ListService.call(@project, {page: page, limit: limit, sha: params[:sha]}, current_user&.gitea_token) | |||
| puts @result_object | |||
| end | |||
| def diff | |||
| @result_object = Api::V1::Projects::Commits::DiffService.call(@project, params[:sha], current_user&.gitea_token) | |||
| @@ -0,0 +1,13 @@ | |||
| class Api::V1::Projects::ContentsController < Api::V1::BaseController | |||
| before_action :require_operate_above, only: [:batch] | |||
| def batch | |||
| @result_object = Api::V1::Projects::Contents::BatchCreateService.call(@project, batch_content_params, current_user&.gitea_token) | |||
| puts @result_object | |||
| end | |||
| private | |||
| def batch_content_params | |||
| params.require(:content).permit(:author_email, :author_name, :author_timeunix, :branch, :committer_email, :committer_name, :committer_timeunix, :message, :new_branch, files: [ :action_type, :content, :encoding, :file_path]) | |||
| end | |||
| end | |||
| @@ -1,5 +1,5 @@ | |||
| class Api::V1::ProjectsController < Api::V1::BaseController | |||
| before_action :require_public_and_member_above, only: [:show, :compare] | |||
| before_action :require_public_and_member_above, only: [:show, :compare, :blame] | |||
| def index | |||
| render_ok | |||
| @@ -12,4 +12,9 @@ class Api::V1::ProjectsController < Api::V1::BaseController | |||
| def compare | |||
| @result_object = Api::V1::Projects::CompareService.call(@project, params[:from], params[:to], current_user&.gitea_token) | |||
| end | |||
| def blame | |||
| @result_object = Api::V1::Projects::BlameService.call(@project, params[:sha], params[:filepath], current_user&.gitea_token) | |||
| puts @result_object | |||
| end | |||
| end | |||
| @@ -1093,6 +1093,138 @@ await octokit.request('GET /api/yystopf/ceshi/files.json') | |||
| ] | |||
| ``` | |||
| ## 提交文件到仓库 | |||
| 提交文件到仓库,支持批量 | |||
| > 示例: | |||
| ```shell | |||
| curl -X POST \ | |||
| -d "files[][action_type]=create" \ | |||
| -d "files[][content]=jfksj" \ | |||
| -d "files[][encoding]=text" \ | |||
| -d "files[][file_path]=heihei8" \ | |||
| -d "author_email=yystopf@163.com" \ | |||
| -d "author_name=yystopf" \ | |||
| -d "author_timeunix=1658214400" \ | |||
| -d "committer_email=yystopf@163.com" \ | |||
| -d "committer_name=yystopf" \ | |||
| -d "committer_timeunix=1658214400" \ | |||
| -d "branch=develop" \ | |||
| -d "new_branch=develop_ceshi" \ | |||
| -d "message=测试提交" \ | |||
| http://localhost:3000/api/v1/yystopf/ceshi/contents/batch.json | |||
| ``` | |||
| ```javascript | |||
| await octokit.request('POST /api/v1/yystopf/ceshi/contents/batch.json') | |||
| ``` | |||
| ### HTTP 请求 | |||
| `POST /api/v1/:owner/:repo/contents/batch` | |||
| ### 请求参数: | |||
| 参数 | 必选 | 默认 | 类型 | 字段说明 | |||
| --------- | ------- | ------- | -------- | ---------- | |||
| |owner |是| |string |用户登录名 | | |||
| |repo |是| |string |项目标识identifier | | |||
| |files.action_type |是| |string|操作类型 create: 创建 update: 更新 delete: 删除| | |||
| |files.content |是| |string|文件内容| | |||
| |files.encoding |是| |string|文件编码方式 text 文本 base64 加密| | |||
| |files.file_path |是| |string|文件路径| | |||
| |author_email |是| |string|作者邮箱| | |||
| |author_name |是| |string|作者名称| | |||
| |author_timeunix |是| |int|编码时间,精确到秒| | |||
| |committer_email |是| |string|提交者邮箱| | |||
| |committer_name |是| |string|提交者名称| | |||
| |committer_timeunix|是| |int|提交时间戳,精确到秒| | |||
| |branch |是| |string|提交分支| | |||
| |new_branch |否| |string|如果需要创建新分支,这个需要填| | |||
| |message |是| |string|提交信息| | |||
| > 请求的JSON示例: | |||
| ```json | |||
| { | |||
| "files": [ | |||
| { | |||
| "action_type": "create", | |||
| "content": "jfksj", | |||
| "encoding": "text", | |||
| "file_path": "heihei7" | |||
| } | |||
| ], | |||
| "author_email": "yystopf@163.com", | |||
| "author_name": "yystopf", | |||
| "author_timeunix": 1658214400, | |||
| "committer_email": "yystopf@163.com", | |||
| "committer_name": "yystopf", | |||
| "committer_timeunix": 1658214400, | |||
| "branch": "hh_ceshi", | |||
| "message": "测试提交" | |||
| } | |||
| ``` | |||
| ### 返回字段说明: | |||
| 参数 | 类型 | 字段说明 | |||
| --------- | ----------- | ----------- | |||
| |commit.sha |string |提交ID| | |||
| |commit.author |object |作者| | |||
| |commit.committer |object |提交者| | |||
| |commit.commit_message|string |提交信息| | |||
| |commit.parent_shas |array |父节点commit ID| | |||
| |commit.authored_time|int |编码时间| | |||
| |commit.commited_time|int |提交时间| | |||
| |contents.name |string |文件名称| | |||
| |contents.path |string |文件路径| | |||
| |contents.sha |string |文件标识| | |||
| |contents.type |string |文件类型| | |||
| |contents.size |int |文件大小| | |||
| |contents.url |string |文件地址| | |||
| |contents.encoding |string |编码类型 text 文本 base64 加密 | | |||
| |contents.content |string |文件内容| | |||
| > 返回的JSON示例: | |||
| ```json | |||
| { | |||
| "commit": { | |||
| "sha": "7c1e25f9b974e4b7a3816bd7f5e49b441078e999", | |||
| "author": { | |||
| "id": "2", | |||
| "login": "yystopf", | |||
| "name": "heh", | |||
| "type": "User", | |||
| "image_url": "system/lets/letter_avatars/2/H/188_239_142/120.png" | |||
| }, | |||
| "committer": { | |||
| "id": "2", | |||
| "login": "yystopf", | |||
| "name": "heh", | |||
| "type": "User", | |||
| "image_url": "system/lets/letter_avatars/2/H/188_239_142/120.png" | |||
| }, | |||
| "commit_message": "测试提交\n", | |||
| "parent_shas": [ | |||
| "9aec816d0f3600082ca77893290a14bd29d805fe" | |||
| ], | |||
| "authored_time": 1658214400, | |||
| "commited_time": 1658214400 | |||
| }, | |||
| "contents": [ | |||
| { | |||
| "name": "heihei7", | |||
| "path": "heihei7", | |||
| "sha": "f0acac8efb3021b0f6a7b13b42d033d86e076a4b", | |||
| "type": "file", | |||
| "size": 5, | |||
| "encoding": "base64", | |||
| "content": "amZrc2o=" | |||
| } | |||
| ] | |||
| } | |||
| ``` | |||
| ## 获取仓库代码目录 | |||
| 获取仓库代码目录 | |||
| @@ -1413,6 +1545,89 @@ await octokit.request('GET /api/v1/yystopf/csfjkkj/git/blobs/80dd40214a586223123 | |||
| Success Data. | |||
| </aside> | |||
| ## 获取仓库提交列表 | |||
| 根据分支名、标签、commit ID来获取提交列表 | |||
| > 示例: | |||
| ```shell | |||
| curl -X GET \ | |||
| -d "sha=master" \ | |||
| -d "page=1" \ | |||
| -d "limit=1" \ | |||
| http://localhost:3000/api/v1/yystopf/csfjkkj/commits.json | |||
| ``` | |||
| ```javascript | |||
| await octokit.request('GET /api/v1/yystopf/csfjkkj/commits.json') | |||
| ``` | |||
| ### HTTP 请求 | |||
| `GET /api/v1/:owner/:repo/commits.json` | |||
| ### 请求参数: | |||
| 参数 | 必选 | 默认 | 类型 | 字段说明 | |||
| --------- | ------- | ------- | -------- | ---------- | |||
| |owner|是| | string |用户登录名 | | |||
| |repo |是| | string |项目标识identifier | | |||
| |sha |否| | string |分支名、标签名或Commit ID| | |||
| |page |否| | int |页码| | |||
| |limit|否| | int |每页数量| | |||
| ### 返回字段说明: | |||
| 参数 | 类型 | 字段说明 | |||
| --------- | ----------- | ----------- | |||
| |total_count|int|提交总数| | |||
| |commits.sha|string|提交ID| | |||
| |commits.author|object|提交作者| | |||
| |commits.committer|object|提交者| | |||
| |commits.commit_message|string|提交信息| | |||
| |commits.parent_shas|array|提交父节点ID| | |||
| |commits.files|array|提交文件| | |||
| |commits.commit_date|string|提交日期| | |||
| |commits.commit_time|string|提交时间| | |||
| |commits.branch|string|提交分支| | |||
| > 返回的JSON示例: | |||
| ```json | |||
| { | |||
| "total_count": 12, | |||
| "commits": [ | |||
| { | |||
| "sha": "86c62a1e91c07b58b8aa6c89b94856d89c0f7e55", | |||
| "author": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "committer": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "commit_message": "fix\n", | |||
| "parent_shas": [ | |||
| "411e4d259785241f1bd14faf99ca24fd1b802f2a" | |||
| ], | |||
| "files": [ | |||
| "hd.txt" | |||
| ], | |||
| "commit_date": "2022-07-05", | |||
| "commit_time": "2022-07-05 11:00:45", | |||
| "branch": "hh_ceshi" | |||
| } | |||
| ] | |||
| } | |||
| ``` | |||
| <aside class="success"> | |||
| Success Data. | |||
| </aside> | |||
| ## 获取单个提交的blame信息 | |||
| 根据commit ID获取blame信息 | |||
| @@ -1531,6 +1746,203 @@ await octokit.request('GET /api/v1/yystopf/csfjkkj/commits/80dd40214a58622312393 | |||
| Success Data. | |||
| </aside> | |||
| ## 获取单个文件的blame信息 | |||
| 根据分支、标签、commitID获取某个文件的blame信息 | |||
| > 示例: | |||
| ```shell | |||
| curl -X GET \ | |||
| -d "sha=master" \ | |||
| -d "filepath=hd.txt" \ | |||
| http://localhost:3000/api/v1/yystopf/csfjkkj/blame.json | |||
| ``` | |||
| ```javascript | |||
| await octokit.request('GET /api/v1/yystopf/csfjkkj/blame.json') | |||
| ``` | |||
| ### HTTP 请求 | |||
| `GET /api/v1/:owner/:repo/blame.json` | |||
| ### 请求参数: | |||
| 参数 | 必选 | 默认 | 类型 | 字段说明 | |||
| --------- | ------- | ------- | -------- | ---------- | |||
| |owner |是| | string |用户登录名 | | |||
| |repo |是| | string |项目标识identifier | | |||
| |sha |是| | string |分支、标签或提交记录id | | |||
| |filepath|是| | string |文件路径| | |||
| ### 返回字段说明: | |||
| 参数 | 类型 | 字段说明 | |||
| --------- | ----------- | ----------- | |||
| |file_size|int|文件大小| | |||
| |file_name|string|文件名称| | |||
| |num_lines|int|文件总行数| | |||
| |blame_parts.commit|object|提交| | |||
| |blame_parts.current_number|int|当前行数| | |||
| |blame_parts.effect_line|int|影响的行数| | |||
| |blame_parts.lines|array|行内容| | |||
| > 返回的JSON示例: | |||
| ```json | |||
| { | |||
| "file_size": 32, | |||
| "file_name": "hd.txt", | |||
| "num_lines": 12, | |||
| "blame_parts": [ | |||
| { | |||
| "commit": { | |||
| "sha": "40f76e80bf5bc41fcc94c28ca8a6eab506c15215", | |||
| "author": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "committer": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "commit_message": "fix\n", | |||
| "authored_time": "2022-07-04 18:41:25", | |||
| "committed_time": "2022-07-04 18:41:25", | |||
| "created_time": "2022-07-04 18:41:25" | |||
| }, | |||
| "current_number": 1, | |||
| "effect_line": 5, | |||
| "lines": [ | |||
| "dkfj", | |||
| "s", | |||
| "324", | |||
| "234", | |||
| "2" | |||
| ] | |||
| }, | |||
| { | |||
| "commit": { | |||
| "sha": "86c62a1e91c07b58b8aa6c89b94856d89c0f7e55", | |||
| "author": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "committer": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "commit_message": "fix\n", | |||
| "authored_time": "2022-07-05 11:00:45", | |||
| "committed_time": "2022-07-05 11:00:45", | |||
| "created_time": "2022-07-05 11:00:45" | |||
| }, | |||
| "current_number": 6, | |||
| "effect_line": 1, | |||
| "lines": [ | |||
| "dd" | |||
| ] | |||
| }, | |||
| { | |||
| "commit": { | |||
| "sha": "40f76e80bf5bc41fcc94c28ca8a6eab506c15215", | |||
| "author": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "committer": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "commit_message": "fix\n", | |||
| "authored_time": "2022-07-04 18:41:25", | |||
| "committed_time": "2022-07-04 18:41:25", | |||
| "created_time": "2022-07-04 18:41:25" | |||
| }, | |||
| "current_number": 7, | |||
| "effect_line": 3, | |||
| "lines": [ | |||
| "23", | |||
| "4", | |||
| "23" | |||
| ] | |||
| }, | |||
| { | |||
| "commit": { | |||
| "sha": "86c62a1e91c07b58b8aa6c89b94856d89c0f7e55", | |||
| "author": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "committer": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "commit_message": "fix\n", | |||
| "authored_time": "2022-07-05 11:00:45", | |||
| "committed_time": "2022-07-05 11:00:45", | |||
| "created_time": "2022-07-05 11:00:45" | |||
| }, | |||
| "current_number": 10, | |||
| "effect_line": 1, | |||
| "lines": [ | |||
| "s1" | |||
| ] | |||
| }, | |||
| { | |||
| "commit": { | |||
| "sha": "40f76e80bf5bc41fcc94c28ca8a6eab506c15215", | |||
| "author": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "committer": { | |||
| "id": null, | |||
| "login": "viletyy", | |||
| "name": "viletyy", | |||
| "type": null, | |||
| "image_url": "system/lets/letter_avatars/2/V/39_141_222/120.png" | |||
| }, | |||
| "commit_message": "fix\n", | |||
| "authored_time": "2022-07-04 18:41:25", | |||
| "committed_time": "2022-07-04 18:41:25", | |||
| "created_time": "2022-07-04 18:41:25" | |||
| }, | |||
| "current_number": 11, | |||
| "effect_line": 1, | |||
| "lines": [ | |||
| "" | |||
| ] | |||
| } | |||
| ] | |||
| } | |||
| ``` | |||
| <aside class="success"> | |||
| Success Data. | |||
| </aside> | |||
| ## 获取比较提交blame | |||
| 根据分支名、标签、commit ID来获取代码对比blame | |||
| @@ -0,0 +1,38 @@ | |||
| class Api::V1::Projects::BlameService < ApplicationService | |||
| include ActiveModel::Model | |||
| attr_reader :project, :sha, :filepath, :owner, :repo, :token | |||
| attr_accessor :gitea_data | |||
| validates :sha, :filepath, presence: true | |||
| def initialize(project, sha, filepath, token=nil) | |||
| @project = project | |||
| @owner = project&.owner.login | |||
| @repo = project&.identifier | |||
| @sha = sha | |||
| @filepath = filepath | |||
| @token = token | |||
| end | |||
| def call | |||
| raise Error, errors.full_messages.join(",") unless valid? | |||
| load_gitea_data | |||
| gitea_data | |||
| end | |||
| private | |||
| def request_params | |||
| { | |||
| access_token: token, | |||
| sha: sha, | |||
| filepath: filepath | |||
| } | |||
| end | |||
| def load_gitea_data | |||
| @gitea_data = $gitea_client.get_repos_blame_by_owner_repo(owner, repo, {query: request_params}) | |||
| raise Error, '获取项目blame失败!' unless @gitea_data.is_a?(Hash) | |||
| end | |||
| end | |||
| @@ -44,7 +44,7 @@ class Api::V1::Projects::Branches::CreateService < ApplicationService | |||
| end | |||
| def check_new_branch_exist | |||
| result = $gitea_client.get_repos_branch_name_set_by_owner_repo(owner, repo) rescue nil | |||
| result = $gitea_client.get_repos_branch_name_set_by_owner_repo(owner, repo, {query: request_params}) rescue nil | |||
| raise Error, '查询分支名称失败!' unless result.is_a?(Hash) | |||
| raise Error, '分支已存在!' if result['branch_name'].include?(@new_branch_name) | |||
| end | |||
| @@ -0,0 +1,38 @@ | |||
| class Api::V1::Projects::Commits::ListService < ApplicationService | |||
| attr_reader :project, :sha, :page, :limit, :owner, :repo, :token | |||
| attr_accessor :gitea_data | |||
| def initialize(project, params, token=nil) | |||
| @project = project | |||
| @sha = params[:sha] | |||
| @page = params[:page] || 1 | |||
| @limit = params[:limit] || 15 | |||
| @owner = project&.owner.login | |||
| @repo = project&.identifier | |||
| @token = token | |||
| end | |||
| def call | |||
| load_gitea_data | |||
| gitea_data | |||
| end | |||
| private | |||
| def request_params | |||
| param = { | |||
| access_token: token, | |||
| page: page, | |||
| limit: limit | |||
| } | |||
| param.merge!(sha: sha) if sha.present? | |||
| param | |||
| end | |||
| def load_gitea_data | |||
| @gitea_data = $gitea_client.get_repos_commits_by_owner_repo(owner, repo, {query: request_params}) rescue nil | |||
| raise Error, '获取提交列表失败!' unless @gitea_data.is_a?(Hash) | |||
| end | |||
| end | |||
| @@ -0,0 +1,91 @@ | |||
| class Api::V1::Projects::Contents::BatchCreateService < ApplicationService | |||
| include ActiveModel::Model | |||
| attr_reader :project, :owner, :repo, :token | |||
| attr_reader :files, :author_email, :author_name, :author_timeunix, :branch, :committer_email, :committer_name, :committer_timeunix, :message, :new_branch | |||
| attr_accessor :gitea_data | |||
| validates :author_email, :committer_email, presence: true, format: { with: CustomRegexp::EMAIL } | |||
| validates :author_name, :committer_name, presence: true, format: { with: /\A(?!_)(?!.*?_$)[a-zA-Z0-9_-]{4,15}\z/ } | |||
| validates :author_timeunix, :committer_timeunix, presence: true | |||
| validates :branch, presence: true | |||
| validates :message, presence: true | |||
| def initialize(project, params, token=nil) | |||
| puts params | |||
| @project = project | |||
| @owner = project&.owner.login | |||
| @repo = project&.identifier | |||
| @token = token | |||
| @files = params[:files] | |||
| @author_email = params[:author_email] | |||
| @author_name = params[:author_name] | |||
| @author_timeunix = params[:author_timeunix] | |||
| @branch = params[:branch] | |||
| @committer_email = params[:committer_email] | |||
| @committer_name = params[:committer_name] | |||
| @committer_timeunix = params[:committer_timeunix] | |||
| @message = params[:message] | |||
| @new_branch = params[:new_branch] | |||
| end | |||
| def call | |||
| raise Error, '请输入正确的文件参数Files' unless valid_files? | |||
| raise Error, errors.full_messages.join(", ") unless valid? | |||
| check_branch_exist | |||
| excute_data_to_gitea | |||
| gitea_data | |||
| end | |||
| private | |||
| def request_params | |||
| { | |||
| access_token: token | |||
| } | |||
| end | |||
| def request_body | |||
| { | |||
| files: files, | |||
| header: { | |||
| author: { | |||
| email: author_email, | |||
| name: author_name | |||
| }, | |||
| committer: { | |||
| email: committer_email, | |||
| name: committer_name | |||
| }, | |||
| dates: { | |||
| author: Time.at(author_timeunix.to_i), | |||
| committer: Time.at(committer_timeunix.to_i) | |||
| }, | |||
| message: message, | |||
| new_branch: new_branch, | |||
| signoff: false | |||
| } | |||
| } | |||
| end | |||
| def valid_files? | |||
| return false unless files.is_a?(Array) && !files.blank? | |||
| files.each do |file| | |||
| return false unless file.has_key?(:action_type) && file.has_key?(:content) && file.has_key?(:encoding) && file.has_key?(:file_path) | |||
| end | |||
| end | |||
| def excute_data_to_gitea | |||
| @gitea_data = $gitea_client.post_repos_contents_batch_by_owner_repo(owner, repo, {body: request_body.to_json, query: request_params}) rescue nil | |||
| raise Error, '创建文件失败!' unless @gitea_data.is_a?(Hash) | |||
| end | |||
| def check_branch_exist | |||
| result = $gitea_client.get_repos_branch_name_set_by_owner_repo(owner, repo, {query: request_params} ) rescue nil | |||
| raise Error, '查询分支名称失败!' unless result.is_a?(Hash) | |||
| raise Error, '分支不存在!' unless result['branch_name'].include?(branch) | |||
| raise Error, '分支已存在!' if result['branch_name'].include?(new_branch) && new_branch.nil? | |||
| end | |||
| end | |||
| @@ -0,0 +1,22 @@ | |||
| json.file_size @result_object['file_size'] | |||
| json.file_name @result_object['file_name'] | |||
| json.num_lines @result_object['num_lines'] | |||
| json.blame_parts @result_object['blame_parts'] do |part| | |||
| json.commit do | |||
| json.sha part['commit']['id'] | |||
| json.author do | |||
| json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(part['commit']['author']), name: part['commit']['author']['Name'] } | |||
| end | |||
| json.committer do | |||
| json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(part['commit']['commiter']), name: part['commit']['commiter']['Name'] } | |||
| end | |||
| json.commit_message part['commit']['commit_message'] | |||
| json.authored_time render_unix_time(part['commit']['authored_time']) | |||
| json.committed_time render_unix_time(part['commit']['committed_time']) | |||
| json.created_time render_unix_time(part['commit']['created_time']) | |||
| end | |||
| json.current_number part['current_number'] | |||
| json.effect_line part['effect_line'] | |||
| json.lines part['lines'] | |||
| end | |||
| @@ -0,0 +1,10 @@ | |||
| json.sha commit['sha'] | |||
| json.author do | |||
| json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(commit['author']), name: commit['author']['name'] } | |||
| end | |||
| json.committer do | |||
| json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(commit['committer']), name: commit['committer']['name'] } | |||
| end | |||
| json.commit_message commit['message'] | |||
| json.parent_shas commit['parents'].map{|x|x['sha']} | |||
| @@ -0,0 +1,17 @@ | |||
| json.total_count @result_object[:total_data].to_i | |||
| json.commits @result_object[:data].each do |commit| | |||
| json.sha commit['sha'] | |||
| json.author do | |||
| json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(commit['commit']['author']), name: commit['commit']['author']['name'] } | |||
| end | |||
| json.committer do | |||
| json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(commit['commit']['committer']), name: commit['commit']['committer']['name'] } | |||
| end | |||
| json.commit_message commit['commit']['message'] | |||
| json.parent_shas commit['parents'].map{|x|x['sha']} | |||
| json.files commit['files'].map{|f|f['filename']} | |||
| json.commit_date commit['commit_date'] | |||
| json.commit_time render_unix_time(commit['commit']['committer']['date']) | |||
| json.branch commit['branch'] | |||
| end | |||
| @@ -0,0 +1,14 @@ | |||
| json.commit do | |||
| json.partial! "api/v1/projects/commits/simple_gitea_detail", commit: @result_object['commit'] | |||
| json.authored_time render_unix_time(@result_object['commit']['author']['date']) | |||
| json.commited_time render_unix_time(@result_object['commit']['committer']['date']) | |||
| end | |||
| json.contents @result_object['contents'].each do |content| | |||
| json.name content['name'] | |||
| json.path content['path'] | |||
| json.sha content['sha'] | |||
| json.type content['type'] | |||
| json.size content['size'] | |||
| json.encoding content['encoding'] | |||
| json.content content['content'] | |||
| end | |||
| @@ -12,6 +12,7 @@ defaults format: :json do | |||
| resource :projects, path: '/', only: [:show, :update, :edit, :destroy] do | |||
| collection do | |||
| get :compare | |||
| get :blame | |||
| end | |||
| end | |||
| @@ -32,10 +33,16 @@ defaults format: :json do | |||
| get :all | |||
| end | |||
| end | |||
| resources :commits, only: [:index] | |||
| get '/commits/:sha/diff', to: 'commits#diff' | |||
| get '/git/blobs/:sha', to: 'git#blobs' | |||
| get '/git/trees/:sha', to: 'git#trees' | |||
| resources :contents, only: [:index] do | |||
| collection do | |||
| post :batch | |||
| end | |||
| end | |||
| end | |||
| end | |||