Mercurial > hg > soundsoftware-site
comparison 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 |
comparison
equal
deleted
inserted
replaced
138:fca2657f4aa5 | 246:eeebe205a056 |
---|---|
23 revision.format_identifier | 23 revision.format_identifier |
24 else | 24 else |
25 revision.to_s | 25 revision.to_s |
26 end | 26 end |
27 end | 27 end |
28 | 28 |
29 def truncate_at_line_break(text, length = 255) | 29 def truncate_at_line_break(text, length = 255) |
30 if text | 30 if text |
31 text.gsub(%r{^(.{#{length}}[^\n]*)\n.+$}m, '\\1...') | 31 text.gsub(%r{^(.{#{length}}[^\n]*)\n.+$}m, '\\1...') |
32 end | 32 end |
33 end | 33 end |
34 | 34 |
35 def render_properties(properties) | 35 def render_properties(properties) |
36 unless properties.nil? || properties.empty? | 36 unless properties.nil? || properties.empty? |
37 content = '' | 37 content = '' |
38 properties.keys.sort.each do |property| | 38 properties.keys.sort.each do |property| |
39 content << content_tag('li', "<b>#{h property}</b>: <span>#{h properties[property]}</span>") | 39 content << content_tag('li', "<b>#{h property}</b>: <span>#{h properties[property]}</span>") |
40 end | 40 end |
41 content_tag('ul', content, :class => 'properties') | 41 content_tag('ul', content, :class => 'properties') |
42 end | 42 end |
43 end | 43 end |
44 | 44 |
45 def render_changeset_changes | 45 def render_changeset_changes |
46 changes = @changeset.changes.find(:all, :limit => 1000, :order => 'path').collect do |change| | 46 changes = @changeset.changes.find(:all, :limit => 1000, :order => 'path').collect do |change| |
47 case change.action | 47 case change.action |
48 when 'A' | 48 when 'A' |
49 # Detects moved/copied files | 49 # Detects moved/copied files |
73 p[:c] = change | 73 p[:c] = change |
74 end | 74 end |
75 | 75 |
76 render_changes_tree(tree[:s]) | 76 render_changes_tree(tree[:s]) |
77 end | 77 end |
78 | 78 |
79 def render_changes_tree(tree) | 79 def render_changes_tree(tree) |
80 return '' if tree.nil? | 80 return '' if tree.nil? |
81 | 81 |
82 output = '' | 82 output = '' |
83 output << '<ul>' | 83 output << '<ul>' |
84 tree.keys.sort.each do |file| | 84 tree.keys.sort.each do |file| |
85 style = 'change' | 85 style = 'change' |
86 text = File.basename(h(file)) | 86 text = File.basename(h(file)) |
113 end | 113 end |
114 end | 114 end |
115 output << '</ul>' | 115 output << '</ul>' |
116 output | 116 output |
117 end | 117 end |
118 | 118 |
119 def to_utf8(str) | 119 def to_utf8(str) |
120 return str if str.blank? | |
120 if str.respond_to?(:force_encoding) | 121 if str.respond_to?(:force_encoding) |
121 str.force_encoding('UTF-8') | 122 str.force_encoding('UTF-8') |
122 return str if str.valid_encoding? | |
123 else | 123 else |
124 # TODO: | |
125 # Japanese Shift_JIS(CP932) is not compatible with ASCII. | |
126 # UTF-7 and Japanese ISO-2022-JP are 7bits clean. | |
124 return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii | 127 return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii |
125 end | 128 end |
126 | 129 |
127 @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip) | 130 @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip) |
128 @encodings.each do |encoding| | 131 @encodings.each do |encoding| |
129 begin | 132 begin |
130 return Iconv.conv('UTF-8', encoding, str) | 133 return Iconv.conv('UTF-8', encoding, str) |
131 rescue Iconv::Failure | 134 rescue Iconv::Failure |
132 # do nothing here and try the next encoding | 135 # do nothing here and try the next encoding |
133 end | 136 end |
134 end | 137 end |
138 str = replace_invalid_utf8(str) | |
139 end | |
140 | |
141 def replace_invalid_utf8(str) | |
142 if str.respond_to?(:force_encoding) | |
143 str.force_encoding('UTF-8') | |
144 if ! str.valid_encoding? | |
145 str = str.encode("US-ASCII", :invalid => :replace, | |
146 :undef => :replace, :replace => '?').encode("UTF-8") | |
147 end | |
148 end | |
135 str | 149 str |
136 end | 150 end |
137 | 151 |
138 def repository_field_tags(form, repository) | 152 def repository_field_tags(form, repository) |
139 method = repository.class.name.demodulize.underscore + "_field_tags" | 153 method = repository.class.name.demodulize.underscore + "_field_tags" |
140 send(method, form, repository) if repository.is_a?(Repository) && respond_to?(method) && method != 'repository_field_tags' | 154 if repository.is_a?(Repository) && |
141 end | 155 respond_to?(method) && method != 'repository_field_tags' |
142 | 156 send(method, form, repository) |
157 end | |
158 end | |
159 | |
143 def scm_select_tag(repository) | 160 def scm_select_tag(repository) |
144 scm_options = [["--- #{l(:actionview_instancetag_blank_option)} ---", '']] | 161 scm_options = [["--- #{l(:actionview_instancetag_blank_option)} ---", '']] |
145 Redmine::Scm::Base.all.each do |scm| | 162 Redmine::Scm::Base.all.each do |scm| |
146 scm_options << ["Repository::#{scm}".constantize.scm_name, scm] if Setting.enabled_scm.include?(scm) || (repository && repository.class.name.demodulize == scm) | 163 if Setting.enabled_scm.include?(scm) || |
147 end | 164 (repository && repository.class.name.demodulize == scm) |
148 | 165 scm_options << ["Repository::#{scm}".constantize.scm_name, scm] |
166 end | |
167 end | |
149 select_tag('repository_scm', | 168 select_tag('repository_scm', |
150 options_for_select(scm_options, repository.class.name.demodulize), | 169 options_for_select(scm_options, repository.class.name.demodulize), |
151 :disabled => (repository && !repository.new_record?), | 170 :disabled => (repository && !repository.new_record?), |
152 :onchange => remote_function(:url => { :controller => 'repositories', :action => 'edit', :id => @project }, :method => :get, :with => "Form.serialize(this.form)") | 171 :onchange => remote_function( |
172 :url => { | |
173 :controller => 'repositories', | |
174 :action => 'edit', | |
175 :id => @project | |
176 }, | |
177 :method => :get, | |
178 :with => "Form.serialize(this.form)") | |
153 ) | 179 ) |
154 end | 180 end |
155 | 181 |
156 def with_leading_slash(path) | 182 def with_leading_slash(path) |
157 path.to_s.starts_with?('/') ? path : "/#{path}" | 183 path.to_s.starts_with?('/') ? path : "/#{path}" |
158 end | 184 end |
159 | 185 |
160 def without_leading_slash(path) | 186 def without_leading_slash(path) |
161 path.gsub(%r{^/+}, '') | 187 path.gsub(%r{^/+}, '') |
162 end | 188 end |
163 | 189 |
164 def subversion_field_tags(form, repository) | 190 def subversion_field_tags(form, repository) |
165 content_tag('p', form.text_field(:url, :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)) + | 191 content_tag('p', form.text_field(:url, :size => 60, :required => true, |
192 :disabled => (repository && !repository.root_url.blank?)) + | |
166 '<br />(file:///, http://, https://, svn://, svn+[tunnelscheme]://)') + | 193 '<br />(file:///, http://, https://, svn://, svn+[tunnelscheme]://)') + |
167 content_tag('p', form.text_field(:login, :size => 30)) + | 194 content_tag('p', form.text_field(:login, :size => 30)) + |
168 content_tag('p', form.password_field(:password, :size => 30, :name => 'ignore', | 195 content_tag('p', form.password_field( |
169 :value => ((repository.new_record? || repository.password.blank?) ? '' : ('x'*15)), | 196 :password, :size => 30, :name => 'ignore', |
170 :onfocus => "this.value=''; this.name='repository[password]';", | 197 :value => ((repository.new_record? || repository.password.blank?) ? '' : ('x'*15)), |
171 :onchange => "this.name='repository[password]';")) | 198 :onfocus => "this.value=''; this.name='repository[password]';", |
199 :onchange => "this.name='repository[password]';")) | |
172 end | 200 end |
173 | 201 |
174 def darcs_field_tags(form, repository) | 202 def darcs_field_tags(form, repository) |
175 content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.new_record?))) | 203 content_tag('p', form.text_field(:url, :label => 'Root directory', |
176 end | 204 :size => 60, :required => true, |
177 | 205 :disabled => (repository && !repository.new_record?))) + |
206 content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS, | |
207 :label => 'Commit messages encoding', :required => true)) | |
208 end | |
209 | |
178 def mercurial_field_tags(form, repository) | 210 def mercurial_field_tags(form, repository) |
179 content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?))) | 211 content_tag('p', form.text_field(:url, :label => 'Root directory', |
212 :size => 60, :required => true, | |
213 :disabled => (repository && !repository.root_url.blank?)) + | |
214 '<br />local repository (e.g. /hgrepo, c:\hgrepo)' ) | |
180 end | 215 end |
181 | 216 |
182 def git_field_tags(form, repository) | 217 def git_field_tags(form, repository) |
183 content_tag('p', form.text_field(:url, :label => 'Path to .git directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?))) | 218 content_tag('p', form.text_field(:url, :label => 'Path to repository', |
219 :size => 60, :required => true, | |
220 :disabled => (repository && !repository.root_url.blank?)) + | |
221 '<br />a bare and local repository (e.g. /gitrepo, c:\gitrepo)') | |
184 end | 222 end |
185 | 223 |
186 def cvs_field_tags(form, repository) | 224 def cvs_field_tags(form, repository) |
187 content_tag('p', form.text_field(:root_url, :label => 'CVSROOT', :size => 60, :required => true, :disabled => !repository.new_record?)) + | 225 content_tag('p', form.text_field(:root_url, |
188 content_tag('p', form.text_field(:url, :label => 'Module', :size => 30, :required => true, :disabled => !repository.new_record?)) | 226 :label => 'CVSROOT', :size => 60, :required => true, |
227 :disabled => !repository.new_record?)) + | |
228 content_tag('p', form.text_field(:url, :label => 'Module', | |
229 :size => 30, :required => true, | |
230 :disabled => !repository.new_record?)) + | |
231 content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS, | |
232 :label => 'Commit messages encoding', :required => true)) | |
189 end | 233 end |
190 | 234 |
191 def bazaar_field_tags(form, repository) | 235 def bazaar_field_tags(form, repository) |
192 content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.new_record?))) | 236 content_tag('p', form.text_field(:url, :label => 'Root directory', |
193 end | 237 :size => 60, :required => true, |
194 | 238 :disabled => (repository && !repository.new_record?))) + |
239 content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS, | |
240 :label => 'Commit messages encoding', :required => true)) | |
241 end | |
242 | |
195 def filesystem_field_tags(form, repository) | 243 def filesystem_field_tags(form, repository) |
196 content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?))) | 244 content_tag('p', form.text_field(:url, :label => 'Root directory', |
245 :size => 60, :required => true, | |
246 :disabled => (repository && !repository.root_url.blank?))) + | |
247 content_tag('p', form.select( | |
248 :path_encoding, [nil] + Setting::ENCODINGS, | |
249 :label => 'Path encoding') + | |
250 '<br />Default: UTF-8') | |
197 end | 251 end |
198 end | 252 end |