Commit 1db1cd7f authored by jplang's avatar jplang

Be more conservative when fetching constants in Repository.factory (#23758).

Patch by Holger Just.

git-svn-id: https://svn.redmine.org/redmine/trunk@15816 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent a3ca848f
......@@ -363,10 +363,14 @@ class Repository < ActiveRecord::Base
end
def self.factory(klass_name, *args)
klass = "Repository::#{klass_name}".constantize
klass.new(*args)
rescue
nil
repository_class(klass_name).new(*args) rescue nil
end
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
def self.scm_adapter_class
......
......@@ -496,4 +496,18 @@ class RepositoryTest < ActiveSupport::TestCase
Repository::Subversion.any_instance.expects(:fetch_changesets).twice.returns(true)
Repository.fetch_changesets
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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment