diff --git a/db/migrate/20230417141788_update_commit_log_message.rb b/db/migrate/20230417141788_update_commit_log_message.rb new file mode 100644 index 000000000..ee5d1f1c4 --- /dev/null +++ b/db/migrate/20230417141788_update_commit_log_message.rb @@ -0,0 +1,5 @@ +class UpdateCommitLogMessage < ActiveRecord::Migration[5.2] + def change + execute("ALTER TABLE `commit_logs` MODIFY `message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") + end +end diff --git a/lib/tasks/commit_log_to_db.rake b/lib/tasks/commit_log_to_db.rake new file mode 100644 index 000000000..ae80f9424 --- /dev/null +++ b/lib/tasks/commit_log_to_db.rake @@ -0,0 +1,78 @@ +namespace :commit_log_to_db do + desc "commit_log_to_db" + task done: :environment do + puts "project_id=================#{ENV['project_id']}" + return if ENV['project_id'].blank? + projects = Project.where(id: ENV['project_id']) + projects.each_with_index do |project, index| + result = Gitea::Repository::Commits::ListService.call(project.owner.login,project.identifier,sha: "", page: 1, limit: 200, token: project.owner.gitea_token) + next if result.blank? || result[:total_count].blank? + total_count = result[:total_count] + # next if total_count > 2000 + puts "#{index} total_count==========#{total_count}" + if total_count > 200 + total_page = (total_count / 200) + 1 + total_page.times do |i| + add_commit_by_page(project, i + 1) + end + else + # add_commit_to_index(project, 1) + data = "" + result[:body].each do |commit| + # puts "commit==========#{commit}" + commiter = commit['commit']['committer'] + # "luoyuan " + commit_author = "#{commiter['name']} <#{commiter['email']}>" + commit_sha = commit['sha'] + ref = "master" + commit_message = commit['commit']['message'].to_s.gsub("\"","") + user = User.find_by(mail: commiter['email']) + user_id = user&.id || project.user_id + commit_date = Time.parse(commit['commit']['author']['date']) + commit_date_str = commit_date.strftime("%a %b %d %H:%M:%S") + + data += "(#{user_id},#{project.id},#{project.repository&.id},'#{project.identifier}','#{project.owner.name}/#{project.identifier}','#{commit_sha}','#{ref}',\"#{commit_message}\",'#{commit_date_str}','#{commit_date_str}')," + end + data = data[0,data.length-1] + sql_connection = ActiveRecord::Base.connection + sql_connection.begin_db_transaction + sql = "INSERT INTO commit_logs (`user_id`, `project_id`, `repository_id`, `name`, `full_name`, `commit_id`, `ref`, `message`, `created_at`, `updated_at`) VALUES #{data}" + sql_connection.execute(sql) + end + end + + # Time.now + # Wed Mar 15 14:12:09 2023 +0800 + # Time.now.strftime("%a %b %d %H:%M:%S %Y") + # Time.now.strftime("%a %b %d %H:%M:%S %Y +0800") + Time.parse("2023-03-15 14:12:09").strftime("%a %b %d %H:%M:%S %Y +0800") + + end + + def add_commit_by_page(project, page) + # Gitea::Repository::Commits::ListSliceService.call(project.owner.login,project.identifier,sha: "", page: 1, limit: 1000, token: "a9244ecac647dd33fee3b480c5898baab1d3fe7d") + result = Gitea::Repository::Commits::ListService.call(project.owner.login,project.identifier,sha: "", page: page, limit: 200, token: project.owner.gitea_token) + data = "" + result[:body].each do |commit| + # puts "commit==========#{commit}" + commiter = commit['commit']['committer'] + # "luoyuan " + commit_author = "#{commiter['name']} <#{commiter['email']}>" + commit_sha = commit['sha'] + ref = "master" + commit_message = commit['commit']['message'].to_s.gsub("/n","").gsub("\"","") + user = User.find_by(mail: commiter['email']) + user_id = user&.id || project.user_id + commit_date = Time.parse(commit['commit']['author']['date']) + commit_date_str = commit_date.strftime("%Y-%m-%d %H:%M:%S") + + data += "(#{user_id},#{project.id},#{project.repository&.id},'#{project.identifier}','#{project.owner.name}/#{project.identifier}','#{commit_sha}','#{ref}',\"#{commit_message}\",'#{commit_date_str}','#{commit_date_str}')," + end + data = data[0,data.length-1] + sql_connection = ActiveRecord::Base.connection + sql_connection.begin_db_transaction + sql = "INSERT INTO commit_logs (`user_id`, `project_id`, `repository_id`, `name`, `full_name`, `commit_id`, `ref`, `message`, `created_at`, `updated_at`) VALUES #{data}" + sql_connection.execute(sql) + end + +end \ No newline at end of file diff --git a/lib/tasks/total_commit_to_db.rake b/lib/tasks/total_commit_to_db.rake index f6d2c9c83..e67568e07 100644 --- a/lib/tasks/total_commit_to_db.rake +++ b/lib/tasks/total_commit_to_db.rake @@ -65,4 +65,4 @@ namespace :total_commit_to_db do sql_connection.execute(sql) end -end \ No newline at end of file +end