# HG changeset patch
# Date 1280421712 -32400
# User Yuya Nishihara <yuya@tcha.org>
# Parent 2f25f98eae1de54a95894495166ee1e7c10ba391
repository: mercurial: sort changesets by revision (fixes #3449, #3567)

In DVCS, changesets are not in date order.
Because Mercurial backend inserts changesets from eariest, 'ORDER BY id'
means 'order by revision number'.

refs #4455

Signed-off-by: Yuya Nishihara <yuya@tcha.org>
Tested-on: Redmine trunk r3840

diff --git a/app/models/repository/mercurial.rb b/app/models/repository/mercurial.rb
--- a/app/models/repository/mercurial.rb
+++ b/app/models/repository/mercurial.rb
@@ -18,6 +18,9 @@
 require 'redmine/scm/adapters/mercurial_adapter'
 
 class Repository::Mercurial < Repository
+  # sort changesets by revision number
+  has_many :changesets, :order => "#{Changeset.table_name}.id DESC", :foreign_key => 'repository_id'
+
   attr_protected :root_url
   validates_presence_of :url
 
@@ -52,6 +55,18 @@ class Repository::Mercurial < Repository
     entries
   end
 
+  # Returns the latest changesets for +path+; sorted by revision number
+  def latest_changesets(path, rev, limit=10)
+    if path.blank?
+      changesets.find(:all, :include => :user, :limit => limit)
+    else
+      changes.find(:all, :include => {:changeset => :user},
+                         :conditions => ["path = ?", path.with_leading_slash],
+                         :order => "#{Changeset.table_name}.id DESC",
+                         :limit => limit).collect(&:changeset)
+    end
+  end
+
   def fetch_changesets
     scm_info = scm.info
     if scm_info
diff --git a/test/fixtures/repositories/mercurial_repository.tar.gz b/test/fixtures/repositories/mercurial_repository.tar.gz
index 1d8ad305732f7a0d7bfbcd52bbeec919da88e3f1..c2a1b58745c8fdf994e7ab43b11919e79a639be4
GIT binary patch
literal 8058
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
I@&KR!02pZfuK)l5

diff --git a/test/unit/repository_mercurial_test.rb b/test/unit/repository_mercurial_test.rb
--- a/test/unit/repository_mercurial_test.rb
+++ b/test/unit/repository_mercurial_test.rb
@@ -75,6 +75,16 @@ class RepositoryMercurialTest < ActiveSu
       assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
     end
 
+    def test_changeset_order_by_revision
+      @repository.fetch_changesets
+      @repository.reload
+      c0 = @repository.latest_changeset
+      c1 = @repository.changesets(nil, nil)[1]
+      # sorted by revision (id), not by date
+      assert c0.revision.to_i > c1.revision.to_i
+      assert c0.committed_on < c1.committed_on
+    end
+
   else
     puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
