From 3762a54effbdf5f0a24a1ce3e9fec80b1eedd62f Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Mar 2023 18:57:56 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=B4=A1?= =?UTF-8?q?=E7=8C=AE=E8=80=85=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 5 ++-- .../repository/contributors/get_service.rb | 24 +++++++++++++++---- .../repositories/contributors.json.jbuilder | 3 +-- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index e32b31017..e6fef78f0 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -166,8 +166,9 @@ class RepositoriesController < ApplicationController if params[:filepath].present? || @project.educoder? @contributors = [] else - result = Gitea::Repository::Contributors::GetService.call(@owner, @repository.identifier) - @contributors = result.is_a?(Hash) && result.key?(:status) ? [] : result + result = Gitea::Repository::Contributors::GetService.call(@owner, @repository.identifier, {page: params[:page], limit: params[:limit]}) + @total_count = result[:total_count] + @contributors = result.is_a?(Hash) ? result[:body] : [] end rescue @contributors = [] diff --git a/app/services/gitea/repository/contributors/get_service.rb b/app/services/gitea/repository/contributors/get_service.rb index 1ee1c3955..b20a4a408 100644 --- a/app/services/gitea/repository/contributors/get_service.rb +++ b/app/services/gitea/repository/contributors/get_service.rb @@ -1,22 +1,38 @@ class Gitea::Repository::Contributors::GetService < Gitea::ClientService - attr_reader :owner, :repo_name + attr_reader :owner, :repo_name, :page, :limit - def initialize(owner, repo_name) + def initialize(owner, repo_name, page, limit) @owner = owner @repo_name = repo_name + @page = params[:page] || 1 + @limit = params[:limit] || 20 end def call response = get(url, params) - render_status(response) + render_result(response) end private def params - Hash.new.merge(token: owner.gitea_token) + Hash.new.merge(token: owner.gitea_token, page: page, limit: limit) end def url "/repos/#{owner.login}/#{repo_name}/contributors" end + + def render_result(response) + case response.status + when 200 + result = {} + headers = response.headers.to_hash + body = JSON.parse(response.body) + total_count = headers["x-total"] + result.merge(total_count: total_count.to_i, body: body) + else + nil + # {status: -1, message: "#{body['message']}"} + end + end end \ No newline at end of file diff --git a/app/views/repositories/contributors.json.jbuilder b/app/views/repositories/contributors.json.jbuilder index 4534de693..3947fb967 100644 --- a/app/views/repositories/contributors.json.jbuilder +++ b/app/views/repositories/contributors.json.jbuilder @@ -1,7 +1,6 @@ -total_count = @contributors.size json.list @contributors.each do |contributor| json.partial! 'contributor', locals: { contributor: contributor, project: @project } end -json.total_count total_count +json.total_count @total_count From 6c6f1cfd42f7b549f38bfb4e6d47a91bbdc3b561 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Mar 2023 21:09:07 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E8=B4=A1?= =?UTF-8?q?=E7=8C=AE=E8=80=85=E5=88=86=E9=A1=B5=E5=8F=82=E6=95=B0=E4=BC=A0?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/gitea/repository/contributors/get_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/gitea/repository/contributors/get_service.rb b/app/services/gitea/repository/contributors/get_service.rb index b20a4a408..ea121a50d 100644 --- a/app/services/gitea/repository/contributors/get_service.rb +++ b/app/services/gitea/repository/contributors/get_service.rb @@ -1,7 +1,7 @@ class Gitea::Repository::Contributors::GetService < Gitea::ClientService attr_reader :owner, :repo_name, :page, :limit - def initialize(owner, repo_name, page, limit) + def initialize(owner, repo_name, params) @owner = owner @repo_name = repo_name @page = params[:page] || 1 From ee50083a5744fcb5ba256090a9828e317944a118 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Mar 2023 09:33:52 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E7=BB=9F=E8=AE=A1commit=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 7 +++- lib/tasks/special_commit.rake | 40 ++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 lib/tasks/special_commit.rake diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index e6fef78f0..7ac3984db 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -322,7 +322,12 @@ class RepositoriesController < ApplicationController def get_latest_commit latest_commit = @project.educoder? ? nil : project_commits @latest_commit = latest_commit.present? ? latest_commit[:body][0] : nil - @commits_count = latest_commit.present? ? latest_commit[:total_count] : 0 + cache_total_commits = $redis_cache.get("ProjectSpecialCommit:#{project.id}") + if cache_total_commits.present? + @commits_count = cache_total_commits.to_i + else + @commits_count = latest_commit.present? ? latest_commit[:total_count] : 0 + end end def content_params diff --git a/lib/tasks/special_commit.rake b/lib/tasks/special_commit.rake new file mode 100644 index 000000000..4d5e04f7a --- /dev/null +++ b/lib/tasks/special_commit.rake @@ -0,0 +1,40 @@ +namespace :special_commit do + desc "batch_add_issues" + task :load, [:login, :identifier] => :environment do |t, args| + owner = Owner.find_by(login: args.login) + project = Project.find_by(user_id: owner&.id, identifier: args.identifier) + if owner.nil? || project.nil? + puts "====Project is not found.====" + else + puts "====Sync Project: #{owner.real_name}/#{project.name}====" + puts "====Sync Count Project Self Commit====" + self_commit_list_result = $gitea_client.get_repos_commits_by_owner_repo(owner.login, project.identifier) + total_commits = self_commit_list_result[:total_data].to_i + puts "====Sync Count Project Submodule Commit====" + entries = $gitea_client.get_repos_contents_by_owner_repo(owner.login, project.identifier) + entries.each do |entry| + next if entry["submodule_git_url"].nil? + submodule_git_url = entry["submodule_git_url"].gsub(Rails.application.config_for(:configuration)['platform_url'], '').gsub(".git", '') + real_relative_path = File.expand_path(submodule_git_url, "#{owner.login}/#{project.identifier}").gsub("#{Rails.root}/", '') + sub_project_owner_login = real_relative_path.split("/")[0] + sub_project_identifier = real_relative_path.split("/")[1] + sub_owner = Owner.find_by(login: sub_project_owner_login) + sub_project = sub_owner.projects.find_by(identifier: sub_project_identifier) + next if sub_owner.nil? || sub_project.nil? + sub_commit_list_result = $gitea_client.get_repos_commits_by_owner_repo(sub_project_owner_login, sub_project_identifier) + total_commits += sub_commit_list_result[:total_data].to_i + end + puts "====Sync Count Project forkproject Commit====" + project.forked_projects.each do |p| + forked_project_owner_login = p.owner&.login + forked_project_identifier = p.identifier + next if forked_project_owner_login.nil? || forked_project_owner_login.nil? + forked_commit_list_result = $gitea_client.get_repos_commits_by_owner_repo(forked_project_owner_login, forked_project_identifier) + total_commits += forked_commit_list_result[:total_data].to_i + end + puts "====Write total commits to cache====" + $redis_cache.set("ProjectSpecialCommit:#{project.id}", total_commits) + $redis_cache.expireat("ProjectSpecialCommit:#{project.id}", (Date.today+30.days).to_time.to_i) + end + end +end \ No newline at end of file From e0692bd92acfeb29f3ec82838e1b5ff73913f51c Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Mar 2023 09:49:35 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9Afork=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E4=B8=BA=E5=AD=90=E9=A1=B9=E7=9B=AE=E4=B8=8B=E7=9A=84?= =?UTF-8?q?fork=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tasks/special_commit.rake | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/tasks/special_commit.rake b/lib/tasks/special_commit.rake index 4d5e04f7a..922c51cfe 100644 --- a/lib/tasks/special_commit.rake +++ b/lib/tasks/special_commit.rake @@ -23,15 +23,16 @@ namespace :special_commit do next if sub_owner.nil? || sub_project.nil? sub_commit_list_result = $gitea_client.get_repos_commits_by_owner_repo(sub_project_owner_login, sub_project_identifier) total_commits += sub_commit_list_result[:total_data].to_i + puts "====Sync Count Project Submodule forkproject Commit====" + sub_project.forked_projects.each do |p| + forked_project_owner_login = p.owner&.login + forked_project_identifier = p.identifier + next if forked_project_owner_login.nil? || forked_project_owner_login.nil? + forked_commit_list_result = $gitea_client.get_repos_commits_by_owner_repo(forked_project_owner_login, forked_project_identifier) + total_commits += forked_commit_list_result[:total_data].to_i + end end - puts "====Sync Count Project forkproject Commit====" - project.forked_projects.each do |p| - forked_project_owner_login = p.owner&.login - forked_project_identifier = p.identifier - next if forked_project_owner_login.nil? || forked_project_owner_login.nil? - forked_commit_list_result = $gitea_client.get_repos_commits_by_owner_repo(forked_project_owner_login, forked_project_identifier) - total_commits += forked_commit_list_result[:total_data].to_i - end + puts "====Write total commits to cache====" $redis_cache.set("ProjectSpecialCommit:#{project.id}", total_commits) $redis_cache.expireat("ProjectSpecialCommit:#{project.id}", (Date.today+30.days).to_time.to_i) From 511cbf45655df614dd9c3c0e4328413347108266 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Mar 2023 10:00:14 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=89=A7?= =?UTF-8?q?=E8=A1=8Crake=E4=BB=BB=E5=8A=A1=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tasks/special_commit.rake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/tasks/special_commit.rake b/lib/tasks/special_commit.rake index 922c51cfe..ab6c63767 100644 --- a/lib/tasks/special_commit.rake +++ b/lib/tasks/special_commit.rake @@ -1,5 +1,8 @@ +# 执行示例 bundle exec rake "special_commit:load[yystopf, pig]" +# RAILS_ENV=production bundle exec rake "special_commit:load[yystopf, pig]" +# namespace :special_commit do - desc "batch_add_issues" + desc "Sync Special Commit to Cache" task :load, [:login, :identifier] => :environment do |t, args| owner = Owner.find_by(login: args.login) project = Project.find_by(user_id: owner&.id, identifier: args.identifier) From 7fe204056d554ce2f8684db1eed748ead6061ba6 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Mar 2023 11:59:08 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9Aforks=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E6=98=BE=E7=A4=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 8 +++++++- app/views/repositories/detail.json.jbuilder | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 7ac3984db..24bc937de 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -22,6 +22,12 @@ class RepositoriesController < ApplicationController def detail @user = current_user @result = Repositories::DetailService.call(@owner, @repository, @user) + cache_total_forks = $redis_cache.get("ProjectSpecialForks:#{@project.id}") + if cache_total_forks.present? + @project_forked_count = @project.forked_count.to_i + else + @project_forked_count = cache_total_forks.to_i + end @project_fork_id = @project.try(:forked_from_project_id) if @project_fork_id.present? @fork_project = Project.find_by(id: @project_fork_id) @@ -322,7 +328,7 @@ class RepositoriesController < ApplicationController def get_latest_commit latest_commit = @project.educoder? ? nil : project_commits @latest_commit = latest_commit.present? ? latest_commit[:body][0] : nil - cache_total_commits = $redis_cache.get("ProjectSpecialCommit:#{project.id}") + cache_total_commits = $redis_cache.get("ProjectSpecialCommit:#{@project.id}") if cache_total_commits.present? @commits_count = cache_total_commits.to_i else diff --git a/app/views/repositories/detail.json.jbuilder b/app/views/repositories/detail.json.jbuilder index 508d4c658..2498379da 100644 --- a/app/views/repositories/detail.json.jbuilder +++ b/app/views/repositories/detail.json.jbuilder @@ -11,7 +11,7 @@ json.issues_count @project.issues.issue_issue.size - @project.issues.issue_issue json.pull_requests_count @project.pull_requests.opening.size json.project_identifier render_identifier(@project) json.praises_count @project.praises_count.to_i -json.forked_count @project.forked_count.to_i +json.forked_count @project_forked_count.to_i json.watchers_count @project.watchers_count.to_i json.versions_count @project.versions.opening.size #里程碑数量 json.version_releases_count @project.releases_size(@user.try(:id), "all") From c891fcf83680047853c5ac89ba0d357ec31f2dc9 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Mar 2023 12:01:09 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9Aforks=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E6=98=BE=E7=A4=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 24bc937de..1d98b17f4 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -24,9 +24,9 @@ class RepositoriesController < ApplicationController @result = Repositories::DetailService.call(@owner, @repository, @user) cache_total_forks = $redis_cache.get("ProjectSpecialForks:#{@project.id}") if cache_total_forks.present? - @project_forked_count = @project.forked_count.to_i - else @project_forked_count = cache_total_forks.to_i + else + @project_forked_count = @project.forked_count.to_i end @project_fork_id = @project.try(:forked_from_project_id) if @project_fork_id.present?