Mercurial > hg > soundsoftware-site
diff app/helpers/.svn/text-base/repositories_helper.rb.svn-base @ 246:eeebe205a056 cannam
* Merge from default branch, bringing us up to SVN trunk rev 4993
author | Chris Cannam |
---|---|
date | Thu, 03 Mar 2011 12:02:03 +0000 |
parents | cd2282d2aa55 051f544170fe |
children | 753f1380d6bc |
line wrap: on
line diff
--- a/app/helpers/.svn/text-base/repositories_helper.rb.svn-base Thu Jan 20 09:59:02 2011 +0000 +++ b/app/helpers/.svn/text-base/repositories_helper.rb.svn-base Thu Mar 03 12:02:03 2011 +0000 @@ -25,13 +25,13 @@ revision.to_s end end - + def truncate_at_line_break(text, length = 255) if text text.gsub(%r{^(.{#{length}}[^\n]*)\n.+$}m, '\\1...') end end - + def render_properties(properties) unless properties.nil? || properties.empty? content = '' @@ -41,7 +41,7 @@ content_tag('ul', content, :class => 'properties') end end - + def render_changeset_changes changes = @changeset.changes.find(:all, :limit => 1000, :order => 'path').collect do |change| case change.action @@ -75,10 +75,10 @@ render_changes_tree(tree[:s]) end - + def render_changes_tree(tree) return '' if tree.nil? - + output = '' output << '<ul>' tree.keys.sort.each do |file| @@ -115,15 +115,18 @@ output << '</ul>' output end - + def to_utf8(str) + return str if str.blank? if str.respond_to?(:force_encoding) str.force_encoding('UTF-8') - return str if str.valid_encoding? else + # TODO: + # Japanese Shift_JIS(CP932) is not compatible with ASCII. + # UTF-7 and Japanese ISO-2022-JP are 7bits clean. return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii end - + @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip) @encodings.each do |encoding| begin @@ -132,67 +135,118 @@ # do nothing here and try the next encoding end end + str = replace_invalid_utf8(str) + end + + def replace_invalid_utf8(str) + if str.respond_to?(:force_encoding) + str.force_encoding('UTF-8') + if ! str.valid_encoding? + str = str.encode("US-ASCII", :invalid => :replace, + :undef => :replace, :replace => '?').encode("UTF-8") + end + end str end - - def repository_field_tags(form, repository) + + def repository_field_tags(form, repository) method = repository.class.name.demodulize.underscore + "_field_tags" - send(method, form, repository) if repository.is_a?(Repository) && respond_to?(method) && method != 'repository_field_tags' + if repository.is_a?(Repository) && + respond_to?(method) && method != 'repository_field_tags' + send(method, form, repository) + end end - + def scm_select_tag(repository) scm_options = [["--- #{l(:actionview_instancetag_blank_option)} ---", '']] 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) + if Setting.enabled_scm.include?(scm) || + (repository && repository.class.name.demodulize == scm) + scm_options << ["Repository::#{scm}".constantize.scm_name, scm] + end end - select_tag('repository_scm', options_for_select(scm_options, repository.class.name.demodulize), :disabled => (repository && !repository.new_record?), - :onchange => remote_function(:url => { :controller => 'repositories', :action => 'edit', :id => @project }, :method => :get, :with => "Form.serialize(this.form)") + :onchange => remote_function( + :url => { + :controller => 'repositories', + :action => 'edit', + :id => @project + }, + :method => :get, + :with => "Form.serialize(this.form)") ) end - + def with_leading_slash(path) path.to_s.starts_with?('/') ? path : "/#{path}" end - + def without_leading_slash(path) path.gsub(%r{^/+}, '') end def subversion_field_tags(form, repository) - content_tag('p', form.text_field(:url, :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)) + + content_tag('p', form.text_field(:url, :size => 60, :required => true, + :disabled => (repository && !repository.root_url.blank?)) + '<br />(file:///, http://, https://, svn://, svn+[tunnelscheme]://)') + content_tag('p', form.text_field(:login, :size => 30)) + - content_tag('p', form.password_field(:password, :size => 30, :name => 'ignore', - :value => ((repository.new_record? || repository.password.blank?) ? '' : ('x'*15)), - :onfocus => "this.value=''; this.name='repository[password]';", - :onchange => "this.name='repository[password]';")) + content_tag('p', form.password_field( + :password, :size => 30, :name => 'ignore', + :value => ((repository.new_record? || repository.password.blank?) ? '' : ('x'*15)), + :onfocus => "this.value=''; this.name='repository[password]';", + :onchange => "this.name='repository[password]';")) end def darcs_field_tags(form, repository) - content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.new_record?))) + content_tag('p', form.text_field(:url, :label => 'Root directory', + :size => 60, :required => true, + :disabled => (repository && !repository.new_record?))) + + content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS, + :label => 'Commit messages encoding', :required => true)) end - + def mercurial_field_tags(form, repository) - content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?))) + content_tag('p', form.text_field(:url, :label => 'Root directory', + :size => 60, :required => true, + :disabled => (repository && !repository.root_url.blank?)) + + '<br />local repository (e.g. /hgrepo, c:\hgrepo)' ) end def git_field_tags(form, repository) - content_tag('p', form.text_field(:url, :label => 'Path to .git directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?))) + content_tag('p', form.text_field(:url, :label => 'Path to repository', + :size => 60, :required => true, + :disabled => (repository && !repository.root_url.blank?)) + + '<br />a bare and local repository (e.g. /gitrepo, c:\gitrepo)') end def cvs_field_tags(form, repository) - content_tag('p', form.text_field(:root_url, :label => 'CVSROOT', :size => 60, :required => true, :disabled => !repository.new_record?)) + - content_tag('p', form.text_field(:url, :label => 'Module', :size => 30, :required => true, :disabled => !repository.new_record?)) + content_tag('p', form.text_field(:root_url, + :label => 'CVSROOT', :size => 60, :required => true, + :disabled => !repository.new_record?)) + + content_tag('p', form.text_field(:url, :label => 'Module', + :size => 30, :required => true, + :disabled => !repository.new_record?)) + + content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS, + :label => 'Commit messages encoding', :required => true)) end def bazaar_field_tags(form, repository) - content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.new_record?))) + content_tag('p', form.text_field(:url, :label => 'Root directory', + :size => 60, :required => true, + :disabled => (repository && !repository.new_record?))) + + content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS, + :label => 'Commit messages encoding', :required => true)) end - + def filesystem_field_tags(form, repository) - content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?))) + content_tag('p', form.text_field(:url, :label => 'Root directory', + :size => 60, :required => true, + :disabled => (repository && !repository.root_url.blank?))) + + content_tag('p', form.select( + :path_encoding, [nil] + Setting::ENCODINGS, + :label => 'Path encoding') + + '<br />Default: UTF-8') end end