From 7351c269deae2c28c63e793df11155e0f6c75d04 Mon Sep 17 00:00:00 2001
From: Lin Jen-Shin <godfat@godfat.org>
Date: Tue, 6 Sep 2016 19:36:07 +0800
Subject: [PATCH] Sort by database, feedback:

https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6084#note_14991226
and
https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6084#note_14994233
---
 lib/gitlab/ci/pipeline_duration.rb           | 6 ++++--
 spec/lib/gitlab/ci/pipeline_duration_spec.rb | 2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/gitlab/ci/pipeline_duration.rb b/lib/gitlab/ci/pipeline_duration.rb
index 0333807263f..711f911346c 100644
--- a/lib/gitlab/ci/pipeline_duration.rb
+++ b/lib/gitlab/ci/pipeline_duration.rb
@@ -88,7 +88,8 @@ module Gitlab
 
       def from_pipeline(pipeline)
         status = %w[success failed running canceled]
-        builds = pipeline.builds.latest.where(status: status)
+        builds = pipeline.builds.latest.
+          where(status: status).where.not(started_at: nil).order(:started_at)
 
         from_builds(builds, :started_at, :finished_at)
       end
@@ -101,8 +102,9 @@ module Gitlab
         from_periods(periods)
       end
 
+      # periods should be sorted by `first`
       def from_periods(periods)
-        process_duration(process_periods(periods.sort_by(&:first)))
+        process_duration(process_periods(periods))
       end
 
       private
diff --git a/spec/lib/gitlab/ci/pipeline_duration_spec.rb b/spec/lib/gitlab/ci/pipeline_duration_spec.rb
index 580af97bea7..b26728a843c 100644
--- a/spec/lib/gitlab/ci/pipeline_duration_spec.rb
+++ b/spec/lib/gitlab/ci/pipeline_duration_spec.rb
@@ -110,6 +110,6 @@ describe Gitlab::Ci::PipelineDuration do
       Gitlab::Ci::PipelineDuration::Period.new(first, last)
     end
 
-    Gitlab::Ci::PipelineDuration.from_periods(periods)
+    Gitlab::Ci::PipelineDuration.from_periods(periods.sort_by(&:first))
   end
 end
-- 
GitLab