From ee50083a5744fcb5ba256090a9828e317944a118 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Mar 2023 09:33:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E7=89=B9=E6=AE=8A?= =?UTF-8?q?=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