Do not create pipeline objects when no builds

This commit is contained in:
Grzegorz Bizon 2016-06-02 15:55:38 +02:00
parent 53fe06efde
commit 07af37a243
3 changed files with 34 additions and 23 deletions

View file

@ -20,26 +20,33 @@ module Ci
end
end
# don't create the same build twice
builds_attrs.reject! do |build_attrs|
@commit.builds.find_by(ref: @commit.ref, tag: @commit.tag,
trigger_request: trigger_request,
name: build_attrs[:name])
end
builds_attrs.map do |build_attrs|
# don't create the same build twice
unless @commit.builds.find_by(ref: @commit.ref, tag: @commit.tag,
trigger_request: trigger_request, name: build_attrs[:name])
build_attrs.slice!(:name,
:commands,
:tag_list,
:options,
:allow_failure,
:stage,
:stage_idx)
build_attrs.slice!(:name,
:commands,
:tag_list,
:options,
:allow_failure,
:stage,
:stage_idx)
build_attrs.merge!(ref: @commit.ref,
tag: @commit.tag,
trigger_request: trigger_request,
user: user,
project: @commit.project)
build_attrs.merge!(ref: @commit.ref,
tag: @commit.tag,
trigger_request: trigger_request,
user: user,
project: @commit.project)
@commit.builds.create!(build_attrs)
end
##
# We do not persist new builds here.
# Those will be persisted when @commit is saved.
#
@commit.builds.new(build_attrs)
end
end
end

View file

@ -25,16 +25,16 @@ class CreateCommitBuildsService
return false
end
# Create a new ci_commit
commit.save!
# Skip creating builds for commits that have [ci skip]
unless commit.skip_ci?
# Create builds for commit
commit.create_builds(user)
# Create builds for commit and
# skip saving pipeline when there are no builds
return false unless commit.create_builds(user)
end
commit.update_state!
# Create a new ci_commit
commit.save!
commit
end
end

View file

@ -9,7 +9,7 @@ describe Ci::CreateBuildsService, services: true do
#
subject do
described_class.new(commit).execute(commit, nil, user, status)
described_class.new(commit).execute('test', user, status, nil)
end
context 'next builds available' do
@ -17,6 +17,10 @@ describe Ci::CreateBuildsService, services: true do
it { is_expected.to be_an_instance_of Array }
it { is_expected.to all(be_an_instance_of Ci::Build) }
it 'does not persist created builds' do
expect(subject.first).not_to be_persisted
end
end
context 'builds skipped' do