end
def to_utf8(str)
- str
+ return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
+ begin
+ Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + ' ')[0..-3]
+ rescue Iconv::InvalidEncoding
+ # "UTF-8//IGNORE" is not supported on some OS
+ str
+ end
end
end
<% if diff_type == 'sbs' -%>
<table class="filecontent">
<thead>
-<tr><th colspan="4" class="filename"><%= table_file.file_name %></th></tr>
+<tr><th colspan="4" class="filename"><%=to_utf8 table_file.file_name %></th></tr>
</thead>
<tbody>
<% prev_line_left, prev_line_right = nil, nil -%>
<% else -%>
<table class="filecontent syntaxhl">
<thead>
-<tr><th colspan="3" class="filename"><%= table_file.file_name %></th></tr>
+<tr><th colspan="3" class="filename"><%=to_utf8 table_file.file_name %></th></tr>
</thead>
<tbody>
<% prev_line_left, prev_line_right = nil, nil -%>
container_type: Issue
container_id: 3
downloads: 0
- disk_filename: 060719210727_changeset.diff
+ disk_filename: 060719210727_changeset_iso8859-1.diff
digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
id: 5
filesize: 687
- filename: changeset.diff
+ filename: changeset_iso8859-1.diff
author_id: 2
content_type: text/x-diff
attachments_006:
filename: foo.zip
author_id: 2
content_type: application/octet-stream
+attachments_014:
+ created_on: 2006-07-19 21:07:27 +02:00
+ container_type: Issue
+ container_id: 3
+ downloads: 0
+ disk_filename: 060719210727_changeset_utf8.diff
+ digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+ id: 14
+ filesize: 687
+ filename: changeset_utf8.diff
+ author_id: 2
+ content_type: text/x-diff
+++ /dev/null
-Index: trunk/app/controllers/issues_controller.rb
-===================================================================
---- trunk/app/controllers/issues_controller.rb (r\82vision 1483)
-+++ trunk/app/controllers/issues_controller.rb (r\82vision 1484)
-@@ -149,7 +149,7 @@
- attach_files(@issue, params[:attachments])
- flash[:notice] = l(:notice_successful_create)
- Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
-- redirect_to :controller => 'issues', :action => 'show', :id => @issue, :project_id => @project
-+ redirect_to :controller => 'issues', :action => 'show', :id => @issue
- return
- end
- end
--- /dev/null
+Index: trunk/app/controllers/issues_controller.rb
+===================================================================
+--- trunk/app/controllers/issues_controller.rb (révision 1483)
++++ trunk/app/controllers/issues_controller.rb (révision 1484)
+@@ -149,7 +149,7 @@
+ attach_files(@issue, params[:attachments])
+ flash[:notice] = 'Demande créée avec succès'
+ Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
+- redirect_to :controller => 'issues', :action => 'show', :id => @issue, :project_id => @project
++ redirect_to :controller => 'issues', :action => 'show', :id => @issue
+ return
+ end
+ end
--- /dev/null
+Index: trunk/app/controllers/issues_controller.rb\r
+===================================================================\r
+--- trunk/app/controllers/issues_controller.rb (révision 1483)\r
++++ trunk/app/controllers/issues_controller.rb (révision 1484)\r
+@@ -149,7 +149,7 @@\r
+ attach_files(@issue, params[:attachments])\r
+ flash[:notice] = 'Demande créée avec succès'\r
+ Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')\r
+- redirect_to :controller => 'issues', :action => 'show', :id => @issue, :project_id => @project\r
++ redirect_to :controller => 'issues', :action => 'show', :id => @issue\r
+ return\r
+ end \r
+ end \r
-# redMine - project management software
-# Copyright (C) 2006-2008 Jean-Philippe Lang
+# encoding: utf-8
+#
+# Redmine - project management software
+# Copyright (C) 2006-2011 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
end
def test_show_diff
- get :show, :id => 5
+ get :show, :id => 14 # 060719210727_changeset_utf8.diff
+ assert_response :success
+ assert_template 'diff'
+ assert_equal 'text/html', @response.content_type
+
+ assert_tag 'th',
+ :attributes => {:class => /filename/},
+ :content => /issues_controller.rb\t\(révision 1484\)/
+ assert_tag 'td',
+ :attributes => {:class => /line-code/},
+ :content => /Demande créée avec succès/
+ end
+
+ def test_show_diff_should_strip_non_utf8_content
+ get :show, :id => 5 # 060719210727_changeset_iso8859-1.diff
assert_response :success
assert_template 'diff'
assert_equal 'text/html', @response.content_type
+
+ assert_tag 'th',
+ :attributes => {:class => /filename/},
+ :content => /issues_controller.rb\t\(rvision 1484\)/
+ assert_tag 'td',
+ :attributes => {:class => /line-code/},
+ :content => /Demande cre avec succs/
end
def test_show_text_file