Mercurial > hg > soundsoftware-site
diff app/models/.svn/text-base/repository.rb.svn-base @ 245:051f544170fe
* Update to SVN trunk revision 4993
author | Chris Cannam |
---|---|
date | Thu, 03 Mar 2011 11:42:28 +0000 |
parents | 07fa8a8b56a8 |
children | eeebe205a056 cbce1fd3b1b7 |
line wrap: on
line diff
--- a/app/models/.svn/text-base/repository.rb.svn-base Thu Mar 03 11:40:10 2011 +0000 +++ b/app/models/.svn/text-base/repository.rb.svn-base Thu Mar 03 11:42:28 2011 +0000 @@ -16,6 +16,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class Repository < ActiveRecord::Base + include Redmine::Ciphering + belongs_to :project has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC" has_many :changes, :through => :changesets @@ -24,29 +26,43 @@ # has_many :changesets, :dependent => :destroy is too slow for big repositories before_destroy :clear_changesets + validates_length_of :password, :maximum => 255, :allow_nil => true # Checks if the SCM is enabled when creating a repository validate_on_create { |r| r.errors.add(:type, :invalid) unless Setting.enabled_scm.include?(r.class.name.demodulize) } - + # Removes leading and trailing whitespace def url=(arg) write_attribute(:url, arg ? arg.to_s.strip : nil) end - + # Removes leading and trailing whitespace def root_url=(arg) write_attribute(:root_url, arg ? arg.to_s.strip : nil) end + + def password + read_ciphered_attribute(:password) + end + + def password=(arg) + write_ciphered_attribute(:password, arg) + end + + def scm_adapter + self.class.scm_adapter_class + end def scm - @scm ||= self.scm_adapter.new url, root_url, login, password + @scm ||= self.scm_adapter.new(url, root_url, + login, password, path_encoding) update_attribute(:root_url, @scm.root_url) if root_url.blank? @scm end - + def scm_name self.class.scm_name end - + def supports_cat? scm.supports_cat? end @@ -173,18 +189,27 @@ user end end - + + def repo_log_encoding + encoding = log_encoding.to_s.strip + encoding.blank? ? 'UTF-8' : encoding + end + # Fetches new changesets for all repositories of active projects # Can be called periodically by an external script # eg. ruby script/runner "Repository.fetch_changesets" def self.fetch_changesets Project.active.has_module(:repository).find(:all, :include => :repository).each do |project| if project.repository - project.repository.fetch_changesets + begin + project.repository.fetch_changesets + rescue Redmine::Scm::Adapters::CommandFailed => e + logger.error "scm: error during fetching changesets: #{e.message}" + end end end end - + # scan changeset comments to find related and fixed issues for all repositories def self.scan_changesets_for_issue_ids find(:all).each(&:scan_changesets_for_issue_ids) @@ -197,16 +222,50 @@ def self.available_scm subclasses.collect {|klass| [klass.scm_name, klass.name]} end - + def self.factory(klass_name, *args) klass = "Repository::#{klass_name}".constantize klass.new(*args) rescue nil end - + + def self.scm_adapter_class + nil + end + + def self.scm_command + ret = "" + begin + ret = self.scm_adapter_class.client_command if self.scm_adapter_class + rescue Redmine::Scm::Adapters::CommandFailed => e + logger.error "scm: error during get command: #{e.message}" + end + ret + end + + def self.scm_version_string + ret = "" + begin + ret = self.scm_adapter_class.client_version_string if self.scm_adapter_class + rescue Redmine::Scm::Adapters::CommandFailed => e + logger.error "scm: error during get version string: #{e.message}" + end + ret + end + + def self.scm_available + ret = false + begin + ret = self.scm_adapter_class.client_available if self.scm_adapter_class + rescue Redmine::Scm::Adapters::CommandFailed => e + logger.error "scm: error during get scm available: #{e.message}" + end + ret + end + private - + def before_save # Strips url and root_url url.strip!