diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 6485ddef..d3e30845 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -217,6 +217,10 @@ class ProjectsController < ApplicationController new_project_params = project_params.except(:private).merge(is_public: !private) @project.update_attributes!(new_project_params) + fork_pull_requests = PullRequest.where(fork_project_id: @project.id) + if fork_pull_requests.present? + fork_pull_requests.update_all(fork_project_identifier: @project.identifier) + end @project.forked_projects.map{|p| p.update!(is_public: @project.is_public)} gitea_params = { private: private, diff --git a/app/models/pull_request.rb b/app/models/pull_request.rb index 0142f27f..26b4ce2c 100644 --- a/app/models/pull_request.rb +++ b/app/models/pull_request.rb @@ -2,25 +2,27 @@ # # Table name: pull_requests # -# id :integer not null, primary key -# gitea_id :integer -# gitea_number :integer -# user_id :integer -# created_at :datetime not null -# updated_at :datetime not null -# status :integer default("0") -# project_id :integer -# title :string(255) -# milestone :integer -# body :text(4294967295) -# head :string(255) -# base :string(255) -# issue_id :integer -# fork_project_id :integer -# is_original :boolean default("0") -# comments_count :integer default("0") -# commits_count :integer default("0") -# files_count :integer default("0") +# id :integer not null, primary key +# gitea_id :integer +# gitea_number :integer +# user_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# status :integer default("0") +# project_id :integer +# title :string(255) +# milestone :integer +# body :text(4294967295) +# head :string(255) +# base :string(255) +# issue_id :integer +# fork_project_id :integer +# is_original :boolean default("0") +# comments_count :integer default("0") +# commits_count :integer default("0") +# files_count :integer default("0") +# fork_project_owner :string(255) +# fork_project_identifier :string(255) # class PullRequest < ApplicationRecord diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb index 07eab898..b83ec51d 100644 --- a/app/services/projects/transfer_service.rb +++ b/app/services/projects/transfer_service.rb @@ -15,6 +15,7 @@ class Projects::TransferService < ApplicationService update_repo_url update_visit_teams update_fork_info + update_fork_pull_request_info end Rails.logger.info("##### Project transfer_service end ######") @@ -49,6 +50,11 @@ class Projects::TransferService < ApplicationService fork_user.update(user_id: @new_owner.id) if fork_user.present? end + def update_fork_pull_request_info + fork_pull_requests = PullRequest.where(fork_project_id: @project.id) + fork_pull_requests.update_all(fork_project_owner: @new_owner&.login) if fork_pull_requests.present? + end + def gitea_update_owner begin @gitea_repo = $gitea_hat_client.post_repos_transfer_by_owner_repo(owner&.login, project.identifier, {body: {new_owner: new_owner&.login}.to_json}) diff --git a/app/services/pull_requests/create_service.rb b/app/services/pull_requests/create_service.rb index 070b564d..0010f875 100644 --- a/app/services/pull_requests/create_service.rb +++ b/app/services/pull_requests/create_service.rb @@ -1,6 +1,6 @@ class PullRequests::CreateService < ApplicationService - attr_reader :current_user, :owner, :project, :params + attr_reader :current_user, :owner, :project, :params, :fork_project attr_accessor :pull_issue, :pull_request def initialize(current_user, owner, project, params) @@ -8,6 +8,7 @@ class PullRequests::CreateService < ApplicationService @project = project @params = params @current_user = current_user + @fork_project = Project.find_by_id(params[:fork_project_id]) end def call @@ -102,7 +103,9 @@ class PullRequests::CreateService < ApplicationService fork_project_id: @params[:fork_project_id], is_original: is_original, files_count: @params[:files_count] || 0, - commits_count: @params[:commits_count] || 0 + commits_count: @params[:commits_count] || 0, + fork_project_owner: @fork_project&.owner&.login, + fork_project_identifier: @fork_project&.identifier }) end diff --git a/app/views/pull_requests/index.json.jbuilder b/app/views/pull_requests/index.json.jbuilder index 8e41d8df..3a35772f 100644 --- a/app/views/pull_requests/index.json.jbuilder +++ b/app/views/pull_requests/index.json.jbuilder @@ -23,10 +23,10 @@ json.issues do json.pull_request_base pr.base json.pull_request_staus pr.status == 1 ? "merged" : (pr.status == 2 ? "closed" : "open") json.is_original pr.is_original - json.fork_project_id pr.fork_project_id.present? ? pr.fork_project_id : pr.project_id - json.fork_project_identifier pr.fork_project_id.present? ? pr&.fork_project&.identifier : pr.project&.identifier - json.fork_project_user pr.fork_project_id.present? ? pr&.fork_project&.owner.try(:login) : pr.project&.owner.try(:login) - json.fork_project_user_name pr.fork_project_id.present? ? pr&.fork_project&.owner.try(:show_real_name) : pr.project&.owner.try(:show_real_name) + json.fork_project_id pr.fork_project_id + json.fork_project_identifier pr.fork_project.present? ? pr&.fork_project&.identifier : pr.fork_project_identifier + json.fork_project_user pr.fork_project.present? ? pr&.fork_project&.owner.try(:login) : pr.fork_project_owner + json.fork_project_user_name pr.fork_project.present? ? pr&.fork_project&.owner.try(:show_real_name) : User.find_by(login: pr.fork_project_owner).try(:show_real_name) json.reviewers pr.reviewers.pluck(:login) json.id issue.id diff --git a/app/views/pull_requests/show.json.jbuilder b/app/views/pull_requests/show.json.jbuilder index 4c731b9a..509577ed 100644 --- a/app/views/pull_requests/show.json.jbuilder +++ b/app/views/pull_requests/show.json.jbuilder @@ -25,9 +25,10 @@ end json.pull_request do json.extract! @pull_request, :id,:base, :head, :status, :is_original json.pull_request_staus @pull_request.status == 1 ? "merged" : (@pull_request.status == 2 ? "closed" : "open") - json.fork_project_id @pull_request.fork_project_id.present? ? @pull_request.fork_project_id : @pull_request.project_id - json.fork_project_user @pull_request.fork_project_id.present? ? @pull_request&.fork_project&.owner.try(:login) : @pull_request.project&.owner.try(:login) - json.fork_project_user_name @pull_request.fork_project_id.present? ? @pull_request&.fork_project&.owner.try(:show_real_name) : @pull_request.project&.owner.try(:show_real_name) + json.fork_project_id @pull_request.fork_project_id + json.fork_project_identifier @pull_request.fork_project.present? ? @pull_request&.fork_project&.identifier : @pull_request.fork_project_identifier + json.fork_project_user @pull_request.fork_project.present? ? @pull_request&.fork_project&.owner.try(:login) : @pull_request.fork_project_owner + json.fork_project_user_name @pull_request.fork_project.present? ? @pull_request&.fork_project&.owner.try(:show_real_name) : User.find_by(login: @pull_request.fork_project_owner).try(:show_real_name) json.create_user @pull_request&.user&.login json.mergeable @gitea_pull["mergeable"] json.state @gitea_pull["state"] diff --git a/db/migrate/20240719015447_add_fork_project_owner_identifier_to_pull_requests.rb b/db/migrate/20240719015447_add_fork_project_owner_identifier_to_pull_requests.rb new file mode 100644 index 00000000..d4d98a55 --- /dev/null +++ b/db/migrate/20240719015447_add_fork_project_owner_identifier_to_pull_requests.rb @@ -0,0 +1,6 @@ +class AddForkProjectOwnerIdentifierToPullRequests < ActiveRecord::Migration[5.2] + def change + add_column :pull_requests, :fork_project_owner, :string + add_column :pull_requests, :fork_project_identifier, :string + end +end