Commit d34904b86c07f6a408bbd4496ea23a23f1208ec5

Authored by Dmitriy Zaporozhets
2 parents e33aab0b 31f3d6ef

Merge branch 'grit_ext'

.travis.yml
  1 +before_install: sudo apt-get install libicu-dev -y
1 2 branches:
2 3 only:
3 4 - 'master'
... ...
Gemfile
... ... @@ -22,9 +22,9 @@ gem "acts_as_list"
22 22 gem "rdiscount"
23 23 gem "acts-as-taggable-on", "~> 2.1.0"
24 24 gem "drapper"
25   -gem "rchardet19", "~> 1.3.5"
26 25 gem "resque"
27 26 gem "httparty"
  27 +gem "charlock_holmes"
28 28  
29 29 group :assets do
30 30 gem "sass-rails", "~> 3.1.0"
... ...
Gemfile.lock
... ... @@ -77,6 +77,7 @@ GEM
77 77 xpath (~> 0.1.4)
78 78 carrierwave (0.5.8)
79 79 activesupport (~> 3.0)
  80 + charlock_holmes (0.6.8)
80 81 childprocess (0.2.2)
81 82 ffi (~> 1.0.6)
82 83 coffee-rails (3.1.1)
... ... @@ -172,7 +173,6 @@ GEM
172 173 rdoc (~> 3.4)
173 174 thor (~> 0.14.6)
174 175 rake (0.9.2.2)
175   - rchardet19 (1.3.5)
176 176 rdiscount (1.6.8)
177 177 rdoc (3.11)
178 178 json (~> 1.4)
... ... @@ -285,6 +285,7 @@ DEPENDENCIES
285 285 awesome_print
286 286 capybara
287 287 carrierwave
  288 + charlock_holmes
288 289 coffee-rails (~> 3.1.0)
289 290 database_cleaner
290 291 devise (= 1.5.0)
... ... @@ -302,7 +303,6 @@ DEPENDENCIES
302 303 pygments.rb (= 0.2.3)
303 304 rails (= 3.1.1)
304 305 rails-footnotes (~> 3.7.5)
305   - rchardet19 (~> 1.3.5)
306 306 rdiscount
307 307 resque
308 308 rspec-rails
... ...
app/helpers/application_helper.rb
1 1 require 'digest/md5'
2 2 module ApplicationHelper
3   - include Utils::CharEncode
4 3  
5 4 def gravatar_icon(user_email, size = 40)
6 5 gravatar_host = request.ssl? ? "https://secure.gravatar.com" : "http://www.gravatar.com"
... ...
app/models/commit.rb
1 1 class Commit
2   - include Utils::CharEncode
3 2  
4 3 attr_accessor :commit
5 4 attr_accessor :head
... ... @@ -22,7 +21,7 @@ class Commit
22 21 end
23 22  
24 23 def safe_message
25   - encode(message)
  24 + message
26 25 end
27 26  
28 27 def created_at
... ... @@ -30,11 +29,11 @@ class Commit
30 29 end
31 30  
32 31 def author_email
33   - encode(author.email)
  32 + author.email
34 33 end
35 34  
36 35 def author_name
37   - encode(author.name)
  36 + author.name
38 37 end
39 38  
40 39 def prev_commit
... ...
app/views/commits/_text_file.html.haml
1 1 %table
2 2 - line_old = 0
3 3 - line_new = 0
4   - - diff_str = encode(diff.diff)
  4 + - diff_str = diff.diff
5 5 - lines_arr = diff_str.lines.to_a
6 6 - lines_arr.each do |line|
7 7 - next if line.match(/^--- \/dev\/null/)
... ...
app/views/refs/_tree.html.haml
... ... @@ -40,9 +40,9 @@
40 40 %h3= content.name
41 41 .readme
42 42 - if content.name =~ /\.(md|markdown)$/i
43   - = markdown(encode content.data)
  43 + = markdown(content.data)
44 44 - else
45   - = simple_format(encode content.data)
  45 + = simple_format(content.data)
46 46  
47 47 :javascript
48 48 $(function(){
... ...
config/initializers/gitlabhq/20_grit_ext.rb
... ... @@ -7,5 +7,23 @@ Grit::Blob.class_eval do
7 7 include Utils::Colorize
8 8 end
9 9  
  10 +#monkey patch raw_object from string
  11 +Grit::GitRuby::Internal::RawObject.class_eval do
  12 + def content
  13 + transcoding(@content)
  14 + end
  15 +
  16 + private
  17 + def transcoding(content)
  18 + content ||= ""
  19 + detection = CharlockHolmes::EncodingDetector.detect(content)
  20 + if hash = detection
  21 + content = CharlockHolmes::Converter.convert(content, hash[:encoding], 'UTF-8') if hash[:encoding]
  22 + end
  23 + content
  24 + end
  25 +end
  26 +
  27 +
10 28 Grit::Git.git_timeout = GIT_OPTS["git_timeout"]
11 29 Grit::Git.git_max_size = GIT_OPTS["git_max_size"]
... ...
lib/graph_commit.rb
1 1 require "grit"
2 2  
3 3 class GraphCommit
4   - include Utils::CharEncode
5 4 attr_accessor :time, :space
6 5 attr_accessor :refs
7 6  
... ... @@ -97,13 +96,13 @@ class GraphCommit
97 96 h[:parents] = self.parents.collect do |p|
98 97 [p.id,0,0]
99 98 end
100   - h[:author] = encode(author.name)
  99 + h[:author] = author.name
101 100 h[:time] = time
102 101 h[:space] = space
103 102 h[:refs] = refs.collect{|r|r.name}.join(" ") unless refs.nil?
104 103 h[:id] = sha
105 104 h[:date] = date
106   - h[:message] = encode(message)
  105 + h[:message] = message
107 106 h[:login] = author.email
108 107 h
109 108 end
... ...
lib/utils.rb
... ... @@ -16,28 +16,14 @@ module Utils
16 16 end
17 17 end
18 18  
19   - module CharEncode
20   - def encode(string)
21   - return '' unless string
22   - cd = CharDet.detect(string)
23   - if cd.confidence > 0.6
24   - string.force_encoding(cd.encoding)
25   - end
26   - string.encode("utf-8", :undef => :replace, :replace => "?", :invalid => :replace)
27   - rescue
28   - "Invalid Encoding"
29   - end
30   - end
31   -
32 19 module Colorize
33   - include CharEncode
34 20 def colorize
35 21 system_colorize(data, name)
36 22 end
37 23  
38 24 def system_colorize(data, file_name)
39 25 ft = handle_file_type(file_name)
40   - Pygments.highlight(encode(data), :lexer => ft, :options => { :encoding => 'utf-8', :linenos => 'True' })
  26 + Pygments.highlight(data, :lexer => ft, :options => { :encoding => 'utf-8', :linenos => 'True' })
41 27 end
42 28  
43 29 def handle_file_type(file_name, mime_type = nil)
... ...