summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2017-07-07 14:42:42 +0000
committerDouwe Maan <douwe@gitlab.com>2017-07-07 14:42:42 +0000
commit1a3edcec4363239a4d080bc9af53d9d455dccfb4 (patch)
tree8bfa139415440f6959c4195213a07ba02f71c722
parent4ccdb83ae489014e671c3fbe75a4d899913c5163 (diff)
parent4c0864fd9e14cda78cacdfbbc2f3072b699ebb9b (diff)
downloadgitlab-ce-1a3edcec4363239a4d080bc9af53d9d455dccfb4.tar.gz
Merge branch 'speed-up-merge-request-all-commits-shas' into 'master'
Speed up `all_commit_shas` for new merge requests See merge request !12706
-rw-r--r--app/models/merge_request.rb5
-rw-r--r--changelogs/unreleased/speed-up-merge-request-all-commits-shas.yml4
-rw-r--r--spec/models/merge_request_spec.rb2
3 files changed, 9 insertions, 2 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 2fc6191e785..6ea774470af 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -849,7 +849,10 @@ class MergeRequest < ActiveRecord::Base
#
def all_commit_shas
if persisted?
- merge_request_diffs.preload(:merge_request_diff_commits).flat_map(&:commit_shas).uniq
+ column_shas = MergeRequestDiffCommit.where(merge_request_diff: merge_request_diffs).pluck('DISTINCT(sha)')
+ serialised_shas = merge_request_diffs.where.not(st_commits: nil).flat_map(&:commit_shas)
+
+ (column_shas + serialised_shas).uniq
elsif compare_commits
compare_commits.to_a.reverse.map(&:id)
else
diff --git a/changelogs/unreleased/speed-up-merge-request-all-commits-shas.yml b/changelogs/unreleased/speed-up-merge-request-all-commits-shas.yml
new file mode 100644
index 00000000000..00f55edc2b7
--- /dev/null
+++ b/changelogs/unreleased/speed-up-merge-request-all-commits-shas.yml
@@ -0,0 +1,4 @@
+---
+title: Make loading new merge requests (those created after the 9.4 upgrade) faster
+merge_request:
+author:
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index ea405fabff0..1eadc28869f 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -803,7 +803,7 @@ describe MergeRequest, models: true do
shared_examples 'returning all SHA' do
it 'returns all SHA from all merge_request_diffs' do
expect(subject.merge_request_diffs.size).to eq(2)
- expect(subject.all_commit_shas).to eq(all_commit_shas)
+ expect(subject.all_commit_shas).to match_array(all_commit_shas)
end
end