diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 050ae5513..0c8aaf2c9 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -25,10 +25,8 @@ class ProjectsController < ApplicationController end def migrate - ActiveRecord::Base.transaction do - Projects::MigrateForm.new(mirror_params).validate! - @project = Projects::MigrateService.new(current_user, mirror_params).call - end + Projects::MigrateForm.new(mirror_params).validate! + @project = Projects::MigrateService.new(current_user, mirror_params).call rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 33b84af2c..f37a8e759 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -32,6 +32,7 @@ class RepositoriesController < ApplicationController @project_owner = @project.owner @entries = Gitea::Repository::Entries::ListService.new(@project_owner, @project.identifier, ref: @ref).call @entries = @entries.sort_by{ |hash| hash['type'] } + @path = Gitea.gitea_config[:domain]+"/#{@project.owner.login}/#{@project.identifier}/raw/branch/#{@ref}/" end def sub_entries diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index b35fa2b99..be1029be1 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -18,4 +18,36 @@ module RepositoriesHelper return nil if author_json.blank? find_user_by_login author_json['login'] end + + def readme_render_decode64_content(str, path) + return nil if str.blank? + content = Base64.decode64(str).force_encoding('UTF-8') + + c_regex = /\!\[.*?\]\((.*?)\)/ + src_regex = /src=\"(.*?)\"/ + ss = content.to_s.scan(c_regex) + ss_src = content.to_s.scan(src_regex) + total_images = ss + ss_src + if total_images.length > 0 + total_images.each do |s| + image_title = /\"(.*?)\"/ + r_content = s[0] + remove_title = r_content.to_s.scan(image_title) + if remove_title.length > 0 + r_content = r_content.gsub(/#{remove_title[0]}/, "").strip + end + if r_content.include?("?") + new_r_content = r_content + "&raw=true" + else + new_r_content = r_content + "?raw=true" + end + unless r_content.include?("http://") || r_content.include?("https://") || r_content.include?("mailto:") + new_r_content = "#{path}" + new_r_content + end + content = content.gsub(/#{r_content}/, new_r_content) + end + end + + return content + end end diff --git a/app/jobs/migrate_remote_repository_job.rb b/app/jobs/migrate_remote_repository_job.rb index 75cf0613f..bdc7d5e23 100644 --- a/app/jobs/migrate_remote_repository_job.rb +++ b/app/jobs/migrate_remote_repository_job.rb @@ -8,7 +8,7 @@ class MigrateRemoteRepositoryJob < ApplicationJob gitea_repository = Gitea::Repository::MigrateService.new(token, params).call if gitea_repository - repo&.project&.update_columns(gpid: gitea_repository["id"], identifier: gitea_repository["name"]) + repo&.project&.update_columns(gpid: gitea_repository["id"]) repo&.mirror&.update_columns(status: Mirror.statuses[:succeeded]) end end diff --git a/app/services/projects/migrate_service.rb b/app/services/projects/migrate_service.rb index eb24bdc41..2eb9172cb 100644 --- a/app/services/projects/migrate_service.rb +++ b/app/services/projects/migrate_service.rb @@ -8,12 +8,10 @@ class Projects::MigrateService < ApplicationService def call @project = Project.new(project_params) - ActiveRecord::Base.transaction do - if @project.save! - Repositories::MigrateService.new(user, @project, repository_params).call - else - # - end + if @project.save! + Repositories::MigrateService.new(user, @project, repository_params).call + else + # end @project rescue => e @@ -27,11 +25,12 @@ class Projects::MigrateService < ApplicationService { name: params[:name], user_id: params[:user_id], + project_type: set_project_type, description: params[:description], + identifier: params[:repository_name], + is_public: project_secretion[:public], project_category_id: params[:project_category_id], project_language_id: params[:project_language_id], - is_public: project_secretion[:public], - project_type: set_project_type } end diff --git a/app/services/repositories/migrate_service.rb b/app/services/repositories/migrate_service.rb index 090d64739..dad7e3930 100644 --- a/app/services/repositories/migrate_service.rb +++ b/app/services/repositories/migrate_service.rb @@ -9,13 +9,11 @@ class Repositories::MigrateService < ApplicationService def call @repository = Repository.new(repository_params) - ActiveRecord::Base.transaction do - if @repository.save! - @repository.set_mirror! if wrapper_mirror - MigrateRemoteRepositoryJob.perform_later(@repository.id, user.gitea_token, gitea_repository_params) - end - @repository + if @repository.save! + @repository.set_mirror! if wrapper_mirror + MigrateRemoteRepositoryJob.perform_later(@repository.id, user.gitea_token, gitea_repository_params) end + @repository rescue => e puts "create mirror repository service error: #{e.message}" raise Error, e.message @@ -23,7 +21,7 @@ class Repositories::MigrateService < ApplicationService private def repository_params - params.merge(project_id: project.id) + params.merge(project_id: project.id, identifier: params[:identifier]) end def gitea_repository_params diff --git a/app/views/repositories/entries.json.jbuilder b/app/views/repositories/entries.json.jbuilder index fcd6f7be4..b246de32f 100644 --- a/app/views/repositories/entries.json.jbuilder +++ b/app/views/repositories/entries.json.jbuilder @@ -17,7 +17,7 @@ json.entries do content = if entry['name'] === 'README.md' content = Gitea::Repository::Entries::GetService.call(@project_owner, @project.identifier, entry['name'], ref: @ref)['content'] - render_decode64_content content + readme_render_decode64_content(content, @path) else entry['content'] end