summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2015-08-26 17:14:22 +0100
committerKamil Trzcinski <ayufan@ayufan.eu>2015-08-26 17:14:22 +0100
commitf8eca1724901cd5b8949c6bdff362405ff7ed754 (patch)
tree7889fd3ee6879efac5386158ea874e03f69c3a31
parente99cdfd1d55d274e22c35a548da3bb5a2ba1e241 (diff)
downloadgitlab-ci-f8eca1724901cd5b8949c6bdff362405ff7ed754.tar.gz
Fix commits ordering when using PostgreSQLfix-commits-ordering-for-postgresql
-rw-r--r--CHANGELOG3
-rw-r--r--app/models/project.rb2
-rw-r--r--spec/models/project_spec.rb18
3 files changed, 22 insertions, 1 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 14c1ffe..8fb1aac 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,8 @@
v8.0.0 (unreleased)
+v7.14.2
+ - Fix commits ordering when using PostgreSQL
+
v7.14.1
- Fix skipped svg
- Fix commits ordering
diff --git a/app/models/project.rb b/app/models/project.rb
index f0cf3a5..9b8815e 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -28,7 +28,7 @@
class Project < ActiveRecord::Base
include ProjectStatus
- has_many :commits, ->() { order(:committed_at, :id) }, dependent: :destroy
+ has_many :commits, ->() { order('CASE WHEN commits.committed_at IS NULL THEN 0 ELSE 1 END', :committed_at, :id) }, dependent: :destroy
has_many :builds, through: :commits, dependent: :destroy
has_many :runner_projects, dependent: :destroy
has_many :runners, through: :runner_projects
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index aa76b99..b6027a8 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -61,6 +61,24 @@ describe Project do
end
end
+ describe 'ordered commits' do
+ let (:project) { FactoryGirl.create :project }
+
+ it 'returns ordered list of commits' do
+ commit1 = FactoryGirl.create :commit, committed_at: 1.hour.ago, project: project
+ commit2 = FactoryGirl.create :commit, committed_at: 2.hour.ago, project: project
+ project.commits.should == [commit2, commit1]
+ end
+
+ it 'returns commits ordered by committed_at and id, with nulls last' do
+ commit1 = FactoryGirl.create :commit, committed_at: 1.hour.ago, project: project
+ commit2 = FactoryGirl.create :commit, committed_at: nil, project: project
+ commit3 = FactoryGirl.create :commit, committed_at: 2.hour.ago, project: project
+ commit4 = FactoryGirl.create :commit, committed_at: nil, project: project
+ project.commits.should == [commit2, commit4, commit3, commit1]
+ end
+ end
+
context :valid_project do
let(:project) { FactoryGirl.create :project }