From bb910c3b46fa9dde47ea3377d4463c0eae5149c7 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Wed, 22 Mar 2017 18:22:34 +0100 Subject: [PATCH] Make CI build to use optimistic locking only on status change --- app/models/commit_status.rb | 4 +++ ...make-ci-build-to-lock-on-status-change.yml | 4 +++ spec/models/commit_status_spec.rb | 36 +++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 changelogs/unreleased/make-ci-build-to-lock-on-status-change.yml diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index 8c71267da65..17b322b5ae3 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -105,6 +105,10 @@ class CommitStatus < ActiveRecord::Base end end + def locking_enabled? + status_changed? + end + def before_sha pipeline.before_sha || Gitlab::Git::BLANK_SHA end diff --git a/changelogs/unreleased/make-ci-build-to-lock-on-status-change.yml b/changelogs/unreleased/make-ci-build-to-lock-on-status-change.yml new file mode 100644 index 00000000000..b0c5eb4ed17 --- /dev/null +++ b/changelogs/unreleased/make-ci-build-to-lock-on-status-change.yml @@ -0,0 +1,4 @@ +--- +title: Make CI build to use optimistic locking only on status change +merge_request: +author: diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb index ea5e4e21039..7343b735a74 100644 --- a/spec/models/commit_status_spec.rb +++ b/spec/models/commit_status_spec.rb @@ -297,4 +297,40 @@ describe CommitStatus, :models do end end end + + describe '#locking_enabled?' do + before do + commit_status.lock_version = 100 + end + + subject { commit_status.locking_enabled? } + + context "when changing status" do + before do + commit_status.status = "running" + end + + it "lock" do + is_expected.to be true + end + + it "raise exception when trying to update" do + expect{ commit_status.save }.to raise_error(ActiveRecord::StaleObjectError) + end + end + + context "when changing description" do + before do + commit_status.description = "test" + end + + it "do not lock" do + is_expected.to be false + end + + it "save correctly" do + expect(commit_status.save).to be true + end + end + end end