mirror of
https://github.com/redmine/redmine.git
synced 2025-11-09 06:46:01 +01:00
Be more conservative when fetching constants in Repository.factory (#23758).
Patch by Holger Just. git-svn-id: http://svn.redmine.org/redmine/trunk@15816 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -363,10 +363,14 @@ class Repository < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.factory(klass_name, *args)
|
def self.factory(klass_name, *args)
|
||||||
klass = "Repository::#{klass_name}".constantize
|
repository_class(klass_name).new(*args) rescue nil
|
||||||
klass.new(*args)
|
end
|
||||||
rescue
|
|
||||||
nil
|
def self.repository_class(class_name)
|
||||||
|
class_name = class_name.to_s.classify
|
||||||
|
if Redmine::Scm::Base.all.include?(class_name)
|
||||||
|
"Repository::#{class_name}".constantize
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.scm_adapter_class
|
def self.scm_adapter_class
|
||||||
|
|||||||
@@ -496,4 +496,18 @@ class RepositoryTest < ActiveSupport::TestCase
|
|||||||
Repository::Subversion.any_instance.expects(:fetch_changesets).twice.returns(true)
|
Repository::Subversion.any_instance.expects(:fetch_changesets).twice.returns(true)
|
||||||
Repository.fetch_changesets
|
Repository.fetch_changesets
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_repository_class
|
||||||
|
assert_equal Repository::Subversion, Repository.repository_class('Subversion')
|
||||||
|
assert_equal Repository::Git, Repository.repository_class('Git')
|
||||||
|
assert_nil Repository.factory('Serializer')
|
||||||
|
assert_nil Repository.factory('Query')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_factory
|
||||||
|
assert_instance_of Repository::Subversion, Repository.factory('Subversion')
|
||||||
|
assert_instance_of Repository::Git, Repository.factory('Git')
|
||||||
|
assert_nil Repository.factory('Serializer')
|
||||||
|
assert_nil Repository.factory('Query')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user