summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/merge_request.rb7
-rw-r--r--changelogs/unreleased/fix-udpate-head-pipeline-method.yml5
-rw-r--r--spec/models/merge_request_spec.rb17
3 files changed, 26 insertions, 3 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 5310f2ee765..a9d1ece0d7e 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -1108,9 +1108,10 @@ class MergeRequest < ActiveRecord::Base
end
def update_head_pipeline
- self.head_pipeline = find_actual_head_pipeline
-
- update_column(:head_pipeline_id, head_pipeline.id) if head_pipeline_id_changed?
+ find_actual_head_pipeline.try do |pipeline|
+ self.head_pipeline = pipeline
+ update_column(:head_pipeline_id, head_pipeline.id) if head_pipeline_id_changed?
+ end
end
def merge_request_pipeline_exists?
diff --git a/changelogs/unreleased/fix-udpate-head-pipeline-method.yml b/changelogs/unreleased/fix-udpate-head-pipeline-method.yml
new file mode 100644
index 00000000000..8dbb9f8e42b
--- /dev/null
+++ b/changelogs/unreleased/fix-udpate-head-pipeline-method.yml
@@ -0,0 +1,5 @@
+---
+title: Fix unexpected exception by failure of finding an actual head pipeline
+merge_request: 24257
+author:
+type: fixed
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index e18b29df321..bfc9035cb56 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -1418,6 +1418,23 @@ describe MergeRequest do
.to change { merge_request.reload.head_pipeline }
.from(nil).to(pipeline)
end
+
+ context 'when merge request has already had head pipeline' do
+ before do
+ merge_request.update!(head_pipeline: pipeline)
+ end
+
+ context 'when failed to find an actual head pipeline' do
+ before do
+ allow(merge_request).to receive(:find_actual_head_pipeline) { }
+ end
+
+ it 'does not update the current head pipeline' do
+ expect { subject }
+ .not_to change { merge_request.reload.head_pipeline }
+ end
+ end
+ end
end
context 'when there are no pipelines with the diff head sha' do