diff options
author | Rémy Coutable <remy@rymai.me> | 2016-04-07 09:41:51 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-04-07 15:54:48 +0200 |
commit | 09be5800265df43e4e50f0fcbea1ff462f616ed7 (patch) | |
tree | 36e04b522e380211d78f1cd788f849f78fd38194 | |
parent | 2ac04162f31d24b6b8ba97d8912e82e5c9c06b65 (diff) | |
download | gitlab-ce-09be5800265df43e4e50f0fcbea1ff462f616ed7.tar.gz |
Merge branch 'update_main_lang_if_unset' into 'master'
Only update main language if it is not already set
Related to gitlab-org/gitlab-ce#14937 (but does not fully fix) This is a temporary fix so performance isn't affected so much.
cc @yorickpeterse @ayufan how does this look?
See merge request !3556
Signed-off-by: Rémy Coutable <remy@rymai.me>
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | app/services/git_push_service.rb | 11 | ||||
-rw-r--r-- | spec/services/git_push_service_spec.rb | 35 |
3 files changed, 39 insertions, 8 deletions
diff --git a/CHANGELOG b/CHANGELOG index 1417cba304d..47ea0360d9c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -19,6 +19,7 @@ v 8.7.0 (unreleased) v 8.6.5 - Fix importing from GitHub Enterprise. !3529 - Check permissions when user attempts to import members from another project. !3535 + - Only update repository language if it is not set to improve performance. !3556 v 8.6.4 - Don't attempt to fetch any tags from a forked repo (Stan Hu) diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb index c007d648dd6..21aab6b4747 100644 --- a/app/services/git_push_service.rb +++ b/app/services/git_push_service.rb @@ -54,12 +54,15 @@ class GitPushService < BaseService end def update_main_language - current_language = @project.repository.main_language + # Performance can be bad so for now only check main_language once + # See https://gitlab.com/gitlab-org/gitlab-ce/issues/14937 + return if @project.main_language.present? - unless current_language == @project.main_language - return @project.update_attributes(main_language: current_language) - end + return unless is_default_branch? + return unless push_to_new_branch? || push_to_existing_branch? + current_language = @project.repository.main_language + @project.update_attributes(main_language: current_language) true end diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb index 8490a729e51..1b48b8ad18b 100644 --- a/spec/services/git_push_service_spec.rb +++ b/spec/services/git_push_service_spec.rb @@ -165,12 +165,39 @@ describe GitPushService, services: true do end context "after push" do - before do - @service = execute_service(project, user, @oldrev, @newrev, @ref) + def execute + execute_service(project, user, @oldrev, @newrev, ref) + end + + context "to master" do + let(:ref) { @ref } + + context 'when main_language is nil' do + it 'obtains the language from the repository' do + expect(project.repository).to receive(:main_language) + execute + end + + it 'sets the project main language' do + execute + expect(project.main_language).to eq("Ruby") + end + end + + context 'when main_language is already set' do + it 'does not check the repository' do + execute # do an initial run to simulate lang being preset + expect(project.repository).not_to receive(:main_language) + execute + end + end end - it { expect(@service.update_main_language).to eq(true) } - it { expect(project.main_language).to eq("Ruby") } + context "to other branch" do + let(:ref) { 'refs/heads/feature/branch' } + + it { expect(project.main_language).to eq(nil) } + end end end |