diff options
author | Stan Hu <stanhu@gmail.com> | 2018-11-02 21:27:01 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-11-02 22:11:30 +0300 |
commit | dbc03ce3a9db7f8c3d29f657beccd839d515e384 (patch) | |
tree | 8149327bf0c2b970f07e6a54536db68ae3cb4bb4 /app/models/merge_request_diff.rb | |
parent | 6f12e3929df987e49427a1355cdf35798f97da65 (diff) |
Optimize merge request refresh by using the database to check commit SHAs
Previously for a given merge request, we would:
1. Create the array of commit SHAs involved in the push (A)
2. Request all merge request commits and map the SHA (B)
3. Reload the diff if there were any common commits between A and B
We can avoid additional database querying and overhead by
checking with the database whether the merge request contains any
of the commit SHAs.
Relates to https://gitlab.com/gitlab-org/gitlab-ce/issues/53213
Diffstat (limited to 'app/models/merge_request_diff.rb')
-rw-r--r-- | app/models/merge_request_diff.rb | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 02c6b650f33..bb6ff8921df 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -140,6 +140,12 @@ class MergeRequestDiff < ActiveRecord::Base merge_request_diff_commits.map(&:sha) end + def commits_by_shas(shas) + return [] unless shas.present? + + merge_request_diff_commits.where(sha: shas) + end + def diff_refs=(new_diff_refs) self.base_commit_sha = new_diff_refs&.base_sha self.start_commit_sha = new_diff_refs&.start_sha |