In DVCS, changesets are not in date order. Because Mercurial backend inserts changesets from eariest, 'ORDER BY id' means 'order by revision number'. Contributed by Yuya Nishihara. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4611 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
d29052f682
commit
2ae2d3ef83
|
@ -18,6 +18,9 @@
|
||||||
require 'redmine/scm/adapters/mercurial_adapter'
|
require 'redmine/scm/adapters/mercurial_adapter'
|
||||||
|
|
||||||
class Repository::Mercurial < Repository
|
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
|
attr_protected :root_url
|
||||||
validates_presence_of :url
|
validates_presence_of :url
|
||||||
|
|
||||||
|
@ -52,6 +55,18 @@ class Repository::Mercurial < Repository
|
||||||
entries
|
entries
|
||||||
end
|
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
|
def fetch_changesets
|
||||||
scm_info = scm.info
|
scm_info = scm.info
|
||||||
if scm_info
|
if scm_info
|
||||||
|
|
Binary file not shown.
|
@ -76,6 +76,17 @@ class RepositoryMercurialTest < ActiveSupport::TestCase
|
||||||
assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
|
assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_changeset_order_by_revision
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
|
||||||
|
c0 = @repository.latest_changeset
|
||||||
|
c1 = @repository.changesets.find_by_revision('0')
|
||||||
|
# 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
|
else
|
||||||
puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
|
puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
|
||||||
def test_fake; assert true end
|
def test_fake; assert true end
|
||||||
|
|
Loading…
Reference in New Issue