From 655289dd337588ad55f41a156cdc2ac318227979 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Sat, 24 Dec 2016 12:24:00 +0800 Subject: [PATCH 1/2] Order only for latest_successful_for Feedback: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8286#note_20461082 --- app/models/ci/pipeline.rb | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index f2f6453b3b9..abbbddaa4f6 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -93,11 +93,8 @@ module Ci .select("max(#{quoted_table_name}.id)") .group(:ref, :sha) - if ref - where(id: max_id, ref: ref) - else - where(id: max_id) - end + relation = ref ? where(ref: ref) : self + relation.where(id: max_id) end def self.latest_status(ref = nil) @@ -105,7 +102,7 @@ module Ci end def self.latest_successful_for(ref) - success.latest(ref).first + success.latest(ref).order(id: :desc).first end def self.truncate_sha(sha) From e60bf0d6c895bd16919bf22da0829055845574e4 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Mon, 26 Dec 2016 14:33:08 +0800 Subject: [PATCH 2/2] Add a test for latest_successful_for --- .../unreleased/fix-latest-pipeine-ordering.yml | 4 ++++ spec/models/ci/pipeline_spec.rb | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 changelogs/unreleased/fix-latest-pipeine-ordering.yml diff --git a/changelogs/unreleased/fix-latest-pipeine-ordering.yml b/changelogs/unreleased/fix-latest-pipeine-ordering.yml new file mode 100644 index 00000000000..b155d51741b --- /dev/null +++ b/changelogs/unreleased/fix-latest-pipeine-ordering.yml @@ -0,0 +1,4 @@ +--- +title: Fix finding the latest pipeline +merge_request: 8301 +author: diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb index dc377d15f15..cebaa157ef3 100644 --- a/spec/models/ci/pipeline_spec.rb +++ b/spec/models/ci/pipeline_spec.rb @@ -464,6 +464,19 @@ describe Ci::Pipeline, models: true do end end + describe '.latest_successful_for' do + include_context 'with some outdated pipelines' + + let!(:latest_successful_pipeline) do + create_pipeline(:success, 'ref', 'D') + end + + it 'returns the latest successful pipeline' do + expect(described_class.latest_successful_for('ref')). + to eq(latest_successful_pipeline) + end + end + describe '#status' do let!(:build) { create(:ci_build, :created, pipeline: pipeline, name: 'test') }