scm: mercurial: accept both of revision and nodeid as changeset id (#3724).
Contributed by Yuya Nishihara. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4654 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
3ad213c29a
commit
e2df831b53
|
@ -55,6 +55,17 @@ class Repository::Mercurial < Repository
|
||||||
entries
|
entries
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Finds and returns a revision with a number or the beginning of a hash
|
||||||
|
def find_changeset_by_name(name)
|
||||||
|
if /[^\d]/ =~ name or name.to_s.size > 8
|
||||||
|
e = changesets.find(:first, :conditions => ['scmid = ?', name.to_s])
|
||||||
|
else
|
||||||
|
e = changesets.find(:first, :conditions => ['revision = ?', name.to_s])
|
||||||
|
end
|
||||||
|
return e if e
|
||||||
|
changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"]) # last ditch
|
||||||
|
end
|
||||||
|
|
||||||
# Returns the latest changesets for +path+; sorted by revision number
|
# Returns the latest changesets for +path+; sorted by revision number
|
||||||
def latest_changesets(path, rev, limit=10)
|
def latest_changesets(path, rev, limit=10)
|
||||||
if path.blank?
|
if path.blank?
|
||||||
|
|
|
@ -47,6 +47,17 @@ begin
|
||||||
assert_nil @adapter.cat("sources/welcome_controller.rb")
|
assert_nil @adapter.cat("sources/welcome_controller.rb")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_access_by_nodeid
|
||||||
|
path = 'sources/welcome_controller.rb'
|
||||||
|
assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_access_by_fuzzy_nodeid
|
||||||
|
path = 'sources/welcome_controller.rb'
|
||||||
|
# falls back to nodeid
|
||||||
|
assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def test_hgversion_for(hgversion, version)
|
def test_hgversion_for(hgversion, version)
|
||||||
|
|
|
@ -35,7 +35,8 @@ class RepositoryMercurialTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
assert_equal 17, @repository.changesets.count
|
assert_equal 17, @repository.changesets.count
|
||||||
assert_equal 25, @repository.changes.count
|
assert_equal 25, @repository.changes.count
|
||||||
assert_equal "Initial import.\nThe repository contains 3 files.", @repository.changesets.find_by_revision('0').comments
|
assert_equal "Initial import.\nThe repository contains 3 files.",
|
||||||
|
@repository.changesets.find_by_revision('0').comments
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_fetch_changesets_incremental
|
def test_fetch_changesets_incremental
|
||||||
|
@ -51,7 +52,9 @@ class RepositoryMercurialTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
def test_entries
|
def test_entries
|
||||||
assert_equal 2, @repository.entries("sources", 2).size
|
assert_equal 2, @repository.entries("sources", 2).size
|
||||||
|
assert_equal 2, @repository.entries("sources", '400bb8672109').size
|
||||||
assert_equal 1, @repository.entries("sources", 3).size
|
assert_equal 1, @repository.entries("sources", 3).size
|
||||||
|
assert_equal 1, @repository.entries("sources", 'b3a615152df8').size
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_locate_on_outdated_repository
|
def test_locate_on_outdated_repository
|
||||||
|
@ -122,6 +125,20 @@ class RepositoryMercurialTest < ActiveSupport::TestCase
|
||||||
assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
|
assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
|
||||||
assert_equal '/README', c2[0].from_path
|
assert_equal '/README', c2[0].from_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_find_changeset_by_name
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
%w|2 400bb8672109 400|.each do |r|
|
||||||
|
assert_equal @repository.find_changeset_by_name(r).revision, '2'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_find_changeset_by_invalid_name
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
assert_nil @repository.find_changeset_by_name('100000')
|
||||||
|
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