summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Davis <edavis@littlestreamsoftware.com>2010-02-16 22:41:59 +0000
committerEric Davis <edavis@littlestreamsoftware.com>2010-02-16 22:41:59 +0000
commit9e22faa640c0d1707da4c2203a6e3f936683b4c9 (patch)
tree81b68a05472ae9559545d7b97c504e6d521a39fe
parentb3330d399543878c2e49df16ed4b73add9afd560 (diff)
downloadredmine-9e22faa640c0d1707da4c2203a6e3f936683b4c9.tar.gz
redmine-9e22faa640c0d1707da4c2203a6e3f936683b4c9.zip
Converted the REDMINE_SUPPORTED_SCM constant to a class
Now SCMs can be added or removed using a simple API, instead of being hardcoded: Redmine::Scm::Base.add('ScmName') Redmine::Scm::Base.delete('ScmName') git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3440 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/controllers/application_controller.rb2
-rw-r--r--app/helpers/repositories_helper.rb2
-rw-r--r--app/views/settings/_repositories.rhtml2
-rw-r--r--lib/redmine.rb9
-rw-r--r--lib/redmine/scm/base.rb23
5 files changed, 34 insertions, 4 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 74f4aef27..4cc671396 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -46,7 +46,7 @@ class ApplicationController < ActionController::Base
include Redmine::MenuManager::MenuController
helper Redmine::MenuManager::MenuHelper
- REDMINE_SUPPORTED_SCM.each do |scm|
+ Redmine::Scm::Base.all.each do |scm|
require_dependency "repository/#{scm.underscore}"
end
diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb
index 0e0f94c79..0c2a44809 100644
--- a/app/helpers/repositories_helper.rb
+++ b/app/helpers/repositories_helper.rb
@@ -126,7 +126,7 @@ module RepositoriesHelper
def scm_select_tag(repository)
scm_options = [["--- #{l(:actionview_instancetag_blank_option)} ---", '']]
- REDMINE_SUPPORTED_SCM.each do |scm|
+ Redmine::Scm::Base.all.each do |scm|
scm_options << ["Repository::#{scm}".constantize.scm_name, scm] if Setting.enabled_scm.include?(scm) || (repository && repository.class.name.demodulize == scm)
end
diff --git a/app/views/settings/_repositories.rhtml b/app/views/settings/_repositories.rhtml
index 581ebf5fd..198b83289 100644
--- a/app/views/settings/_repositories.rhtml
+++ b/app/views/settings/_repositories.rhtml
@@ -13,7 +13,7 @@
<%= link_to_function l(:label_generate_key), "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %>
</p>
-<p><%= setting_multiselect(:enabled_scm, REDMINE_SUPPORTED_SCM) %></p>
+<p><%= setting_multiselect(:enabled_scm, Redmine::Scm::Base.all) %></p>
<p><%= setting_text_field :repositories_encodings, :size => 60 %><br />
<em><%= l(:text_comma_separated) %></em></p>
diff --git a/lib/redmine.rb b/lib/redmine.rb
index 573692ff1..d9a1f4063 100644
--- a/lib/redmine.rb
+++ b/lib/redmine.rb
@@ -7,6 +7,7 @@ require 'redmine/themes'
require 'redmine/hook'
require 'redmine/plugin'
require 'redmine/wiki_formatting'
+require 'redmine/scm/base'
begin
require_library_or_gem 'RMagick' unless Object.const_defined?(:Magick)
@@ -21,7 +22,13 @@ else
FCSV = CSV
end
-REDMINE_SUPPORTED_SCM = %w( Subversion Darcs Mercurial Cvs Bazaar Git Filesystem )
+Redmine::Scm::Base.add "Subversion"
+Redmine::Scm::Base.add "Darcs"
+Redmine::Scm::Base.add "Mercurial"
+Redmine::Scm::Base.add "Cvs"
+Redmine::Scm::Base.add "Bazaar"
+Redmine::Scm::Base.add "Git"
+Redmine::Scm::Base.add "Filesystem"
# Permissions
Redmine::AccessControl.map do |map|
diff --git a/lib/redmine/scm/base.rb b/lib/redmine/scm/base.rb
new file mode 100644
index 000000000..43e8a1877
--- /dev/null
+++ b/lib/redmine/scm/base.rb
@@ -0,0 +1,23 @@
+module Redmine
+ module Scm
+ class Base
+ class << self
+
+ def all
+ @scms
+ end
+
+ # Add a new SCM adapter and repository
+ def add(scm_name)
+ @scms ||= []
+ @scms << scm_name
+ end
+
+ # Remove a SCM adapter from Redmine's list of supported scms
+ def delete(scm_name)
+ @scms.delete(scm_name)
+ end
+ end
+ end
+ end
+end