diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-20 21:08:46 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-20 21:08:46 +0000 |
commit | ee7fba4b844935437233f6c5b74545a28bac4298 (patch) | |
tree | 4f954fb6c51abd3f67edfa22f9eb987cac09eb7f | |
parent | e0ab7eda1b1013e3246b0db28689b0749158f0bf (diff) | |
download | gitlab-ce-ee7fba4b844935437233f6c5b74545a28bac4298.tar.gz |
Add latest changes from gitlab-org/gitlab@master
-rw-r--r-- | app/helpers/submodule_helper.rb | 4 | ||||
-rw-r--r-- | app/models/repository.rb | 4 | ||||
-rw-r--r-- | changelogs/unreleased/sh-reduce-gitaly-calls-submodules.yml | 5 | ||||
-rw-r--r-- | spec/helpers/submodule_helper_spec.rb | 12 | ||||
-rw-r--r-- | spec/models/repository_spec.rb | 6 |
5 files changed, 25 insertions, 6 deletions
diff --git a/app/helpers/submodule_helper.rb b/app/helpers/submodule_helper.rb index 4b83988e8bb..9707a5cef3b 100644 --- a/app/helpers/submodule_helper.rb +++ b/app/helpers/submodule_helper.rb @@ -7,9 +7,7 @@ module SubmoduleHelper # links to files listing for submodule if submodule is a project on this server def submodule_links(submodule_item, ref = nil, repository = @repository) - url = repository.submodule_url_for(ref, submodule_item.path) - - submodule_links_for_url(submodule_item.id, url, repository) + repository.submodule_links.for(submodule_item, ref) end def submodule_links_for_url(submodule_item_id, url, repository) diff --git a/app/models/repository.rb b/app/models/repository.rb index a509315d94f..ebb653cabce 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -1094,6 +1094,10 @@ class Repository message: message) end + def submodule_links + @submodule_links ||= ::Gitlab::SubmoduleLinks.new(self) + end + def update_submodule(user, submodule, commit_sha, message:, branch:) with_cache_hooks do raw.update_submodule( diff --git a/changelogs/unreleased/sh-reduce-gitaly-calls-submodules.yml b/changelogs/unreleased/sh-reduce-gitaly-calls-submodules.yml new file mode 100644 index 00000000000..d7ad16f6a02 --- /dev/null +++ b/changelogs/unreleased/sh-reduce-gitaly-calls-submodules.yml @@ -0,0 +1,5 @@ +--- +title: Eliminate Gitaly N+1 queries loading submodules +merge_request: 23292 +author: +type: performance diff --git a/spec/helpers/submodule_helper_spec.rb b/spec/helpers/submodule_helper_spec.rb index fcfce0eaf31..8eb40b5975a 100644 --- a/spec/helpers/submodule_helper_spec.rb +++ b/spec/helpers/submodule_helper_spec.rb @@ -8,6 +8,11 @@ describe SubmoduleHelper do let(:submodule_item) { double(id: 'hash', path: 'rack') } let(:config) { Gitlab.config.gitlab } let(:repo) { double } + let(:submodules) { Gitlab::SubmoduleLinks.new(repo) } + + before do + allow(repo).to receive(:submodule_links).and_return(submodules) + end shared_examples 'submodule_links' do context 'submodule on self' do @@ -163,7 +168,7 @@ describe SubmoduleHelper do let(:repo) { double(:repo, project: project) } def expect_relative_link_to_resolve_to(relative_path, expected_path) - allow(repo).to receive(:submodule_url_for).and_return(relative_path) + stub_url(relative_path) result = subject expect(result).to eq([expected_path, "#{expected_path}/tree/#{submodule_item.id}"]) @@ -183,7 +188,7 @@ describe SubmoduleHelper do context 'repo path resolves to be located at root (namespace absent)' do it 'returns nil' do - allow(repo).to receive(:submodule_url_for).and_return('../../test.git') + stub_url('../../test.git') result = subject @@ -193,7 +198,7 @@ describe SubmoduleHelper do context 'repo path resolves to be located underneath current project path' do it 'returns nil because it is not possible to have repo nested under another repo' do - allow(repo).to receive(:submodule_url_for).and_return('./test.git') + stub_url('./test.git') result = subject @@ -263,6 +268,7 @@ describe SubmoduleHelper do end def stub_url(url) + allow(submodules).to receive(:submodule_url_for).and_return(url) allow(repo).to receive(:submodule_url_for).and_return(url) end end diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 38f3777c902..d08ca3983af 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -2714,4 +2714,10 @@ describe Repository do .to change { Gitlab::GitalyClient.get_request_count }.by(1) end end + + describe '#submodule_links' do + it 'returns an instance of Gitlab::SubmoduleLinks' do + expect(repository.submodule_links).to be_a(Gitlab::SubmoduleLinks) + end + end end |