diff options
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r-- | app/models/merge_request.rb | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 8127c2cdd8d..14e093eed93 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -17,6 +17,9 @@ class MergeRequest < ActiveRecord::Base has_many :events, as: :target, dependent: :destroy + has_many :merge_requests_closing_issues, class_name: MergeRequestsClosingIssues + has_many :issues_closed, through: :merge_requests_closing_issues, source: :issue + serialize :merge_params, Hash after_create :ensure_merge_request_diff, unless: :importing? @@ -494,6 +497,18 @@ class MergeRequest < ActiveRecord::Base target_project end + # If the merge request closes any issues, save this information in the + # `MergeRequestsClosingIssues` model. This is a performance optimization. + # Calculating this information for a number of merge requests requires + # running `ReferenceExtractor` on each of them separately. + def cache_merge_request_closes_issues!(current_user = self.author) + transaction do + closes_issues(current_user).each do |issue| + MergeRequestsClosingIssues.create!(merge_request: self, issue: issue) + end + end + end + def closes_issue?(issue) closes_issues.include?(issue) end |