summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/repositories_controller.rb28
-rw-r--r--app/views/common/_other.html.erb1
-rw-r--r--app/views/repositories/entry.html.erb4
-rw-r--r--config/locales/de.yml1
-rw-r--r--config/locales/en-GB.yml1
-rw-r--r--config/locales/en.yml1
-rw-r--r--test/functional/repositories_filesystem_controller_test.rb5
-rw-r--r--test/functional/repositories_subversion_controller_test.rb6
8 files changed, 28 insertions, 19 deletions
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb
index 8f34c0034..9c39ad075 100644
--- a/app/controllers/repositories_controller.rb
+++ b/app/controllers/repositories_controller.rb
@@ -168,24 +168,26 @@ class RepositoriesController < ApplicationController
# If the entry is a dir, show the browser
(show; return) if @entry.is_dir?
- @content = @repository.cat(@path, @rev)
- (show_error_not_found; return) unless @content
- if !is_raw && Redmine::MimeType.is_type?('image', @path)
- # simply render
- elsif is_raw ||
- (@content.size && @content.size > Setting.file_max_size_displayed.to_i.kilobyte) ||
- ! is_entry_text_data?(@content, @path)
+ if is_raw
# Force the download
send_opt = { :filename => filename_for_content_disposition(@path.split('/').last) }
send_type = Redmine::MimeType.of(@path)
send_opt[:type] = send_type.to_s if send_type
- send_opt[:disposition] = (Redmine::MimeType.is_type?('image', @path) && !is_raw ? 'inline' : 'attachment')
- send_data @content, send_opt
+ send_opt[:disposition] = (Redmine::MimeType.is_type?('image', @path) ? 'inline' : 'attachment')
+ send_data @repository.cat(@path, @rev), send_opt
else
- # Prevent empty lines when displaying a file with Windows style eol
- # TODO: UTF-16
- # Is this needs? AttachmentsController reads file simply.
- @content.gsub!("\r\n", "\n")
+ if !@entry.size || @entry.size <= Setting.file_max_size_displayed.to_i.kilobyte
+ content = @repository.cat(@path, @rev)
+ (show_error_not_found; return) unless content
+
+ if content.size <= Setting.file_max_size_displayed.to_i.kilobyte &&
+ is_entry_text_data?(content, @path)
+ # TODO: UTF-16
+ # Prevent empty lines when displaying a file with Windows style eol
+ # Is this needed? AttachmentsController simply reads file.
+ @content = content.gsub("\r\n", "\n")
+ end
+ end
@changeset = @repository.find_changeset_by_name(@rev)
end
end
diff --git a/app/views/common/_other.html.erb b/app/views/common/_other.html.erb
new file mode 100644
index 000000000..fe0228a50
--- /dev/null
+++ b/app/views/common/_other.html.erb
@@ -0,0 +1 @@
+<p class="nodata"><%= l(:label_no_preview) %></p>
diff --git a/app/views/repositories/entry.html.erb b/app/views/repositories/entry.html.erb
index d9b5be9ab..37a5db961 100644
--- a/app/views/repositories/entry.html.erb
+++ b/app/views/repositories/entry.html.erb
@@ -10,8 +10,10 @@
<% if Redmine::MimeType.is_type?('image', @path) %>
<%= render :partial => 'common/image', :locals => {:path => url_for(params.merge(:action => 'raw')), :alt => @path} %>
-<% else %>
+<% elsif @content %>
<%= render :partial => 'common/file', :locals => {:filename => @path, :content => @content} %>
+<% else %>
+ <%= render :partial => 'common/other' %>
<% end %>
<% content_for :header_tags do %>
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 3cac093f3..6b248c786 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -655,6 +655,7 @@ de:
label_next: Weiter
label_no_change_option: (Keine Änderung)
label_no_data: Nichts anzuzeigen
+ label_no_preview: Keine Vorschau verfügbar
label_no_issues_in_project: keine Tickets im Projekt
label_nobody: Niemand
label_none: kein
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index 4953f027f..3241d6154 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -531,6 +531,7 @@ en-GB:
label_attribute: Attribute
label_attribute_plural: Attributes
label_no_data: No data to display
+ label_no_preview: No preview available
label_change_status: Change status
label_history: History
label_attachment: File
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 947b2c9b0..f7c696dca 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -617,6 +617,7 @@ en:
label_attribute: Attribute
label_attribute_plural: Attributes
label_no_data: No data to display
+ label_no_preview: No preview available
label_change_status: Change status
label_history: History
label_attachment: File
diff --git a/test/functional/repositories_filesystem_controller_test.rb b/test/functional/repositories_filesystem_controller_test.rb
index 6d872cdf0..87c6cd266 100644
--- a/test/functional/repositories_filesystem_controller_test.rb
+++ b/test/functional/repositories_filesystem_controller_test.rb
@@ -107,12 +107,13 @@ class RepositoriesFilesystemControllerTest < ActionController::TestCase
end
end
- def test_show_text_file_should_send_if_too_big
+ def test_show_text_file_should_show_other_if_too_big
with_settings :file_max_size_displayed => 1 do
get :entry, :id => PRJ_ID,
:path => repository_path_hash(['japanese', 'big-file.txt'])[:param]
assert_response :success
- assert_equal 'text/plain', @response.content_type
+ assert_equal 'text/html', @response.content_type
+ assert_select 'p.nodata'
end
end
diff --git a/test/functional/repositories_subversion_controller_test.rb b/test/functional/repositories_subversion_controller_test.rb
index 41ea3ed37..9eef38e3e 100644
--- a/test/functional/repositories_subversion_controller_test.rb
+++ b/test/functional/repositories_subversion_controller_test.rb
@@ -168,7 +168,7 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
assert_template 'entry'
end
- def test_entry_should_send_if_too_big
+ def test_entry_should_show_other_if_too_big
assert_equal 0, @repository.changesets.count
@repository.fetch_changesets
@project.reload
@@ -178,8 +178,8 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
get :entry, :id => PRJ_ID,
:path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
assert_response :success
- assert_equal 'attachment; filename="helloworld.c"',
- @response.headers['Content-Disposition']
+ assert_equal 'text/html', @response.content_type
+ assert_select 'p.nodata'
end
end