diff --git a/app/models/sync_log.rb b/app/models/sync_log.rb index 73fd8c789..19b8fd8c5 100644 --- a/app/models/sync_log.rb +++ b/app/models/sync_log.rb @@ -8,4 +8,9 @@ class SyncLog @my_log ||= Logger.new("#{Rails.root}/log/sync_project_log.log") @my_log.debug(message) unless message.nil? end + + def self.empty_repo_project_log(message=nil) + empt_log ||= Logger.new("#{Rails.root}/log/empty_repo_project_log.log") + empt_log.debug(message) unless message.nil? + end end \ No newline at end of file diff --git a/app/tasks/check_gitea_user.rb b/app/tasks/check_gitea_user.rb new file mode 100644 index 000000000..bc4d7785d --- /dev/null +++ b/app/tasks/check_gitea_user.rb @@ -0,0 +1,34 @@ +class CheckGiteaUser + # 运行示例: 检查哪些用户的gitea不存在,bundle exec rails runner "CheckMirrorRake.new.call()" + + def call + SyncLog.sync_log("=====begin to check gitea_user======") + + all_users = User.select(:id, :gitea_token, :gitea_uid, :mail, :type).where(type: "User", gitea_token: [nil, ""], gitea_uid: [nil, ""]) + if all_users.present? + new_password = "12345678" + all_users.each do |user| + SyncLog.sync_log("=====check_user_login_is:#{user.login}======") + ActiveRecord::Base.transaction do + interactor = Gitea::RegisterInteractor.call({username: user.login, email: user&.mail.present? ? user.mail : "#{user.login}@example.com", password: new_password}) + if interactor.success? + gitea_user = interactor.result + result = Gitea::User::GenerateTokenService.new(user.login, new_password).call + user.gitea_token = result['sha1'] + user.gitea_uid = gitea_user['id'] + if user.save! + SyncLog.sync_log("=================create_gitea_user_success_login==#{user.login}") + else + SyncLog.sync_log("=================create_gitea_user_success_login==#{user.login}") + end + else + SyncLog.sync_log("=============sync_to_user_failed,user_login====#{user.login}") + end + end + rescue Exception => e + SyncLog.sync_log("=================create_gitea_user_has_erros=#{user.login}===#{e}") + end + end + SyncLog.sync_log("=====end_to_check_gitea_user=====") + end + end \ No newline at end of file diff --git a/app/tasks/check_mirror_rake.rb b/app/tasks/check_mirror_rake.rb index e408d061d..52e969611 100644 --- a/app/tasks/check_mirror_rake.rb +++ b/app/tasks/check_mirror_rake.rb @@ -8,8 +8,7 @@ class CheckMirrorRake all_projects = Project.select(:id,:identifier,:user_id, :gpid, :forked_count,:is_public).includes(:owner, :repository) all_projects.each do |project| SyncLog.sync_log("=====check_project_id:#{project.id}======") - # CheckMirrorJob.perform_later(project) - if project.owner.present? + if project&.owner&.login.present? && response = Gitea::Repository::Branches::ListService.new(project.owner, project.identifier).call else response = "22" @@ -19,7 +18,20 @@ class CheckMirrorRake empty_repo.push(project.id) end end + + SyncLog.empty_repo_project_log("=====empty_repo_project_ids:#{empty_repo}======") + SyncLog.empty_repo_project_log("=====empty_user_project_ids:#{empty_user}======") SyncLog.sync_log("=====empty_repo_project_ids:#{empty_repo}======") SyncLog.sync_log("=====empty_user_project_ids:#{empty_user}======") + + if empty_repo.present? + SyncLog.sync_log("**=====begin_create_empty_repo======**") + empty_repo_projects = all_projects.where(id: empty_repo) + empty_repo_projects.each do |project| + SyncLog.sync_log("**====create_empty_repo_project_id: #{project.id}======**") + CheckMirrorJob.perform_later(project) + end + SyncLog.sync_log("**=====endcreate_empty_repo======**") + end end end \ No newline at end of file