diff --git a/app/controllers/refs_controller.rb b/app/controllers/refs_controller.rb index e4e5b4e..60d6946 100644 --- a/app/controllers/refs_controller.rb +++ b/app/controllers/refs_controller.rb @@ -1,4 +1,5 @@ class RefsController < ApplicationController + include Gitlabhq::Encode before_filter :project # Authorize @@ -49,9 +50,16 @@ class RefsController < ApplicationController def blob if @tree.is_blob? + if @tree.text? + encoding = detect_encoding(@tree.data) + mime_type = encoding ? "text/plain; charset=#{encoding}" : "text/plain" + else + mime_type = @tree.mime_type + end + send_data( @tree.data, - :type => @tree.text? ? "text/plain" : @tree.mime_type, + :type => mime_type, :disposition => 'inline', :filename => @tree.name ) diff --git a/lib/gitlabhq/encode.rb b/lib/gitlabhq/encode.rb index df40206..6069f4f 100644 --- a/lib/gitlabhq/encode.rb +++ b/lib/gitlabhq/encode.rb @@ -5,9 +5,9 @@ module Gitlabhq def utf8 message return nil unless message - hash = CharlockHolmes::EncodingDetector.detect(message) rescue {} - if hash[:encoding] - CharlockHolmes::Converter.convert(message, hash[:encoding], 'UTF-8') + encoding = detect_encoding(message) + if encoding + CharlockHolmes::Converter.convert(message, encoding, 'UTF-8') else message end.force_encoding("utf-8") @@ -16,5 +16,12 @@ module Gitlabhq rescue "" end + + def detect_encoding message + return nil unless message + + hash = CharlockHolmes::EncodingDetector.detect(message) rescue {} + return hash[:encoding] ? hash[:encoding] : nil + end end end -- libgit2 0.21.2