Commit d72f8db08a46cd03879035932ece2b4295bb3948
Exists in
master
and in
4 other branches
Merge branch 'fix_encoding' of https://github.com/brodock/gitlabhq into brodock-fix_encoding
Conflicts: lib/gitlab/encode.rb
Showing
5 changed files
with
29 additions
and
13 deletions
Show diff stats
app/controllers/refs_controller.rb
1 | 1 | class RefsController < ApplicationController |
2 | + include Gitlabhq::Encode | |
2 | 3 | before_filter :project |
3 | 4 | |
4 | 5 | # Authorize |
... | ... | @@ -43,23 +44,26 @@ class RefsController < ApplicationController |
43 | 44 | no_cache_headers |
44 | 45 | end |
45 | 46 | end |
46 | - rescue | |
47 | - return render_404 | |
48 | 47 | end |
49 | 48 | |
50 | 49 | def blob |
51 | 50 | if @tree.is_blob? |
51 | + if @tree.text? | |
52 | + encoding = detect_encoding(@tree.data) | |
53 | + mime_type = encoding ? "text/plain; charset=#{encoding}" : "text/plain" | |
54 | + else | |
55 | + mime_type = @tree.mime_type | |
56 | + end | |
57 | + | |
52 | 58 | send_data( |
53 | 59 | @tree.data, |
54 | - :type => @tree.text? ? "text/plain" : @tree.mime_type, | |
60 | + :type => mime_type, | |
55 | 61 | :disposition => 'inline', |
56 | 62 | :filename => @tree.name |
57 | 63 | ) |
58 | 64 | else |
59 | 65 | head(404) |
60 | 66 | end |
61 | - rescue | |
62 | - return render_404 | |
63 | 67 | end |
64 | 68 | |
65 | 69 | def blame | ... | ... |
app/views/commits/_commit.html.haml
... | ... | @@ -8,7 +8,7 @@ |
8 | 8 | %strong.cgray= commit.author_name |
9 | 9 | – |
10 | 10 | = image_tag gravatar_icon(commit.author_email), :class => "avatar", :width => 16 |
11 | - %span.row_title= truncate(commit.safe_message, :length => 50) rescue "--broken encoding" | |
11 | + %span.row_title= truncate(commit.safe_message, :length => 50) | |
12 | 12 | |
13 | 13 | %span.right.cgray |
14 | 14 | = time_ago_in_words(commit.committed_date) | ... | ... |
app/views/refs/_tree.html.haml
... | ... | @@ -42,9 +42,9 @@ |
42 | 42 | .readme |
43 | 43 | - if content.name =~ /\.(md|markdown)$/i |
44 | 44 | = preserve do |
45 | - = markdown(content.data.force_encoding('UTF-8')) | |
45 | + = markdown(content.data.detect_encoding!) | |
46 | 46 | - else |
47 | - = simple_format(content.data.force_encoding('UTF-8')) | |
47 | + = simple_format(content.data.detect_encoding!) | |
48 | 48 | |
49 | 49 | - if params[:path] |
50 | 50 | - history_path = tree_file_project_ref_path(@project, @ref, params[:path]) | ... | ... |
app/views/refs/_tree_file.html.haml
lib/gitlab/encode.rb
1 | +# Patch Strings to enable detect_encoding! on views | |
2 | +require 'charlock_holmes/string' | |
1 | 3 | module Gitlab |
2 | 4 | module Encode |
3 | 5 | extend self |
... | ... | @@ -5,16 +7,26 @@ module Gitlab |
5 | 7 | def utf8 message |
6 | 8 | return nil unless message |
7 | 9 | |
8 | - hash = CharlockHolmes::EncodingDetector.detect(message) rescue {} | |
9 | - if hash[:encoding] | |
10 | - CharlockHolmes::Converter.convert(message, hash[:encoding], 'UTF-8') | |
10 | + detect = CharlockHolmes::EncodingDetector.detect(message) rescue {} | |
11 | + | |
12 | + # It's better to default to UTF-8 as sometimes it's wrongly detected as another charset | |
13 | + if detect[:encoding] && detect[:confidence] == 100 | |
14 | + CharlockHolmes::Converter.convert(message, detect[:encoding], 'UTF-8') | |
11 | 15 | else |
12 | 16 | message |
13 | 17 | end.force_encoding("utf-8") |
18 | + | |
14 | 19 | # Prevent app from crash cause of |
15 | 20 | # encoding errors |
16 | 21 | rescue |
17 | - "" | |
22 | + "--broken encoding: #{encoding}" | |
23 | + end | |
24 | + | |
25 | + def detect_encoding message | |
26 | + return nil unless message | |
27 | + | |
28 | + hash = CharlockHolmes::EncodingDetector.detect(message) rescue {} | |
29 | + return hash[:encoding] ? hash[:encoding] : nil | |
18 | 30 | end |
19 | 31 | end |
20 | 32 | end | ... | ... |