##// END OF EJS Templates
scm: fix annotate error with non ASCII author on Ruby 1.9 and Ruby 2.0 (#14931)...
Toshi MARUYAMA -
r11926:5aa8358f97d2
parent child
Show More
@@ -26,7 +26,9
26 </td>
26 </td>
27 <td class="author">
27 <td class="author">
28 <% if revision && revision != previous_revision %>
28 <% if revision && revision != previous_revision %>
29 <%= revision.author.to_s.split('<').first %>
29 <% author = Redmine::CodesetUtil.to_utf8(revision.author.to_s,
30 @repository.repo_log_encoding) %>
31 <%= author.split('<').first %>
30 <% end %>
32 <% end %>
31 </td>
33 </td>
32 <td class="line-code"><pre><%= line.html_safe %></pre></td>
34 <td class="line-code"><pre><%= line.html_safe %></pre></td>
@@ -26,6 +26,7 class RepositoriesBazaarControllerTest < ActionController::TestCase
26 REPOSITORY_PATH = Rails.root.join('tmp/test/bazaar_repository').to_s
26 REPOSITORY_PATH = Rails.root.join('tmp/test/bazaar_repository').to_s
27 REPOSITORY_PATH_TRUNK = File.join(REPOSITORY_PATH, "trunk")
27 REPOSITORY_PATH_TRUNK = File.join(REPOSITORY_PATH, "trunk")
28 PRJ_ID = 3
28 PRJ_ID = 3
29 CHAR_1_UTF8_HEX = "\xc3\x9c"
29
30
30 def setup
31 def setup
31 User.current = nil
32 User.current = nil
@@ -35,6 +36,10 class RepositoriesBazaarControllerTest < ActionController::TestCase
35 :url => REPOSITORY_PATH_TRUNK,
36 :url => REPOSITORY_PATH_TRUNK,
36 :log_encoding => 'UTF-8')
37 :log_encoding => 'UTF-8')
37 assert @repository
38 assert @repository
39 @char_1_utf8 = CHAR_1_UTF8_HEX.dup
40 if @char_1_utf8.respond_to?(:force_encoding)
41 @char_1_utf8.force_encoding('UTF-8')
42 end
38 end
43 end
39
44
40 if File.directory?(REPOSITORY_PATH)
45 if File.directory?(REPOSITORY_PATH)
@@ -171,6 +176,37 class RepositoriesBazaarControllerTest < ActionController::TestCase
171 end
176 end
172 end
177 end
173
178
179 if REPOSITORY_PATH.respond_to?(:force_encoding)
180 def test_annotate_author_non_ascii
181 log_encoding = nil
182 if Encoding.locale_charmap == "UTF-8" ||
183 Encoding.locale_charmap == "ISO-8859-1"
184 log_encoding = Encoding.locale_charmap
185 end
186 unless log_encoding.nil?
187 repository = Repository::Bazaar.create(
188 :project => @project,
189 :url => File.join(REPOSITORY_PATH, "author_non_ascii"),
190 :identifier => 'author_non_ascii',
191 :log_encoding => log_encoding)
192 assert repository
193 get :annotate, :id => PRJ_ID, :repository_id => 'author_non_ascii',
194 :path => repository_path_hash(['author-non-ascii-test.txt'])[:param]
195 assert_response :success
196 assert_template 'annotate'
197 assert_select "th.line-num", :text => '1' do
198 assert_select "+ td.revision" do
199 assert_select "a", :text => '2'
200 assert_select "+ td.author", :text => "test #{@char_1_utf8}" do
201 assert_select "+ td",
202 :text => "author non ASCII test"
203 end
204 end
205 end
206 end
207 end
208 end
209
174 def test_destroy_valid_repository
210 def test_destroy_valid_repository
175 @request.session[:user_id] = 1 # admin
211 @request.session[:user_id] = 1 # admin
176 assert_equal 0, @repository.changesets.count
212 assert_equal 0, @repository.changesets.count
@@ -27,6 +27,7 class RepositoriesGitControllerTest < ActionController::TestCase
27 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
27 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
28 PRJ_ID = 3
28 PRJ_ID = 3
29 CHAR_1_HEX = "\xc3\x9c"
29 CHAR_1_HEX = "\xc3\x9c"
30 FELIX_HEX = "Felix Sch\xC3\xA4fer"
30 NUM_REV = 28
31 NUM_REV = 28
31
32
32 ## Git, Mercurial and CVS path encodings are binary.
33 ## Git, Mercurial and CVS path encodings are binary.
@@ -50,8 +51,10 class RepositoriesGitControllerTest < ActionController::TestCase
50 )
51 )
51 assert @repository
52 assert @repository
52 @char_1 = CHAR_1_HEX.dup
53 @char_1 = CHAR_1_HEX.dup
54 @felix_utf8 = FELIX_HEX.dup
53 if @char_1.respond_to?(:force_encoding)
55 if @char_1.respond_to?(:force_encoding)
54 @char_1.force_encoding('UTF-8')
56 @char_1.force_encoding('UTF-8')
57 @felix_utf8.force_encoding('UTF-8')
55 end
58 end
56 end
59 end
57
60
@@ -546,6 +549,23 class RepositoriesGitControllerTest < ActionController::TestCase
546 end
549 end
547 end
550 end
548
551
552 def test_annotate_latin_1_author
553 ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', '83ca5fd546063a'].each do |r1|
554 get :annotate, :id => PRJ_ID,
555 :path => repository_path_hash([" filename with a leading space.txt "])[:param],
556 :rev => r1
557 assert_select "th.line-num", :text => '1' do
558 assert_select "+ td.revision" do
559 assert_select "a", :text => '83ca5fd5'
560 assert_select "+ td.author", :text => @felix_utf8 do
561 assert_select "+ td",
562 :text => "And this is a file with a leading and trailing space..."
563 end
564 end
565 end
566 end
567 end
568
549 def test_revisions
569 def test_revisions
550 assert_equal 0, @repository.changesets.count
570 assert_equal 0, @repository.changesets.count
551 @repository.fetch_changesets
571 @repository.fetch_changesets
General Comments 0
You need to be logged in to leave comments. Login now