diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-10-06 12:07:11 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-11-06 11:04:09 +0100 |
commit | e2828a60679495d716ed3824959794f4d5fbf5bb (patch) | |
tree | 077bd7c2a3e9b4d289f2ec5278fcd30be4603a3d | |
parent | 503f21367051c18412d6bdf3d4586eaddaf69087 (diff) | |
download | gitlab-ce-e2828a60679495d716ed3824959794f4d5fbf5bb.tar.gz |
Use existing pipeline stage if stage already exists
-rw-r--r-- | app/models/commit_status.rb | 14 | ||||
-rw-r--r-- | spec/models/commit_status_spec.rb | 23 |
2 files changed, 34 insertions, 3 deletions
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index 7f2295dd4da..12e187024dd 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -192,12 +192,20 @@ class CommitStatus < ActiveRecord::Base private def ensure_pipeline_stage! - attributes = { name: stage, pipeline: pipeline, project: project } - - Ci::Stage.create!(attributes).tap do |stage| + (find_stage || create_stage!).tap do |stage| self.stage_id = stage.id yield stage end end + + def find_stage + pipeline.stages.find_by(name: stage) + end + + def create_stage! + Ci::Stage.create!(name: stage, + pipeline: pipeline, + project: project) + end end diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb index 6c94f463a6a..c536dab2681 100644 --- a/spec/models/commit_status_spec.rb +++ b/spec/models/commit_status_spec.rb @@ -499,6 +499,29 @@ describe CommitStatus do end end + context 'when commit status does not have stage but it exists' do + let!(:stage) do + create(:ci_stage_entity, project: project, + pipeline: pipeline, + name: 'test') + end + + let(:commit_status) do + create(:commit_status, project: project, + pipeline: pipeline, + name: 'rspec', + stage: 'test', + status: :success) + end + + it 'uses existing stage' do + expect { commit_status }.not_to change { Ci::Stage.count } + + expect(commit_status.stage_id).to eq stage.id + expect(stage.reload.status).to eq commit_status.status + end + end + context 'when commit status is being imported' do let(:commit_status) do create(:commit_status, name: 'rspec', stage: 'test', importing: true) |