diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 78056beed..b19d2b633 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -86,6 +86,13 @@ class ProjectsController < ApplicationController @branches = result.is_a?(Hash) && result.key?(:status) ? [] : result end + def branches_slice + return @branches = [] unless @project.forge? + + slice_result = Gitea::Repository::Branches::ListSliceService.call(@owner, @project.identifier) + @branches_slice = slice_result.is_a?(Hash) && slice_result.key?(:status) ? [] : slice_result + end + def group_type_list project_statics = ProjectStatistic.first diff --git a/app/services/gitea/repository/branches/list_slice_service.rb b/app/services/gitea/repository/branches/list_slice_service.rb new file mode 100644 index 000000000..6b643831a --- /dev/null +++ b/app/services/gitea/repository/branches/list_slice_service.rb @@ -0,0 +1,22 @@ +class Gitea::Repository::Branches::ListSliceService < Gitea::ClientService + attr_reader :user, :repo + + def initialize(user, repo) + @user = user + @repo = repo + end + + def call + response = get(url, params) + render_200_response(response) + end + + private + def params + Hash.new.merge(token: user.gitea_token) + end + + def url + "/repos/#{user.login}/#{repo}/branches/branches_slice".freeze + end +end diff --git a/app/services/repositories/detail_service.rb b/app/services/repositories/detail_service.rb index d8853cf45..7488ce24d 100644 --- a/app/services/repositories/detail_service.rb +++ b/app/services/repositories/detail_service.rb @@ -13,6 +13,7 @@ class Repositories::DetailService < ApplicationService repo: {}, release: [], branch: [], + branch_type: [], tag: [], contributor: [], language: {}, @@ -23,6 +24,7 @@ class Repositories::DetailService < ApplicationService repo: repo_suitable, release: release_suitable, branch: branch_suitable, + branch_slice: branch_slice_suitable, tag: tag_suitable, contributor: contributor_suitable, language: language_suitable, @@ -43,7 +45,12 @@ class Repositories::DetailService < ApplicationService def branch_suitable branches = Gitea::Repository::Branches::ListService.call(@owner, @repo.identifier) - branches.is_a?(Hash) && branches[:status] == :error ? [] : branches + branches.is_a?(Hash) && branches.key?(:status) ? [] : branches + end + + def branch_slice_suitable + branches = Gitea::Repository::Branches::ListSliceService.call(@owner, @repo.identifier) + branches.is_a?(Hash) && branches.key?(:status) == :error ? [] : branches end def tag_suitable diff --git a/app/views/projects/branches_slice.json.jbuilder b/app/views/projects/branches_slice.json.jbuilder new file mode 100644 index 000000000..2731b1513 --- /dev/null +++ b/app/views/projects/branches_slice.json.jbuilder @@ -0,0 +1,20 @@ +json.array! @branches_slice do |branch_slice| + json.branch_type branch_slice['branch_name'] + json.list branch_slice['branches'].each do |branch| + json.name branch['name'] + json.user_can_push branch['user_can_push'] + json.user_can_merge branch['user_can_merge'] + json.protected branch['protected'] + json.http_url render_http_url(@project) + json.zip_url render_zip_url(@owner, @repository, branch['name']) + json.tar_url render_tar_url(@owner, @repository, branch['name']) + json.last_commit do + json.sha branch['commit']['id'] + json.message branch['commit']['message'] + json.timestamp render_unix_time(branch['commit']['timestamp']) + json.time_from_now time_from_now(branch['commit']['timestamp']) + json.author branch['commit']['author'] + json.committer branch['commit']['committer'] + end + end +end \ No newline at end of file diff --git a/app/views/repositories/detail.json.jbuilder b/app/views/repositories/detail.json.jbuilder index c00ae3462..18b5dd887 100644 --- a/app/views/repositories/detail.json.jbuilder +++ b/app/views/repositories/detail.json.jbuilder @@ -72,6 +72,15 @@ json.branches do end json.total_count @result[:branch].size end +json.branches_slice do + json.list @result[:branch_slice].each do |branch_slice| + json.branch_type branch_slice["branch_name"] + json.list branch_slice["branches"].each do |branch| + json.name branch["name"] + end + end + json.total_count @result[:branch_slice].size +end json.tags do json.list @result[:tag].each do |tag| json.name tag["name"] diff --git a/config/routes.rb b/config/routes.rb index 9c6dda1b0..1f029db3a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -416,6 +416,7 @@ Rails.application.routes.draw do member do get :menu_list get :branches + get :branches_slice get :simple get :watchers, to: 'projects#watch_users' get :stargazers, to: 'projects#praise_users'