Commit 5b6019f357d01d7871068da15549d19be1a0cf4f
1 parent
9ee34575
Exists in
master
and in
4 other branches
Using github's linguist to better detect filetypes and to do syntax highlighting.
Showing
6 changed files
with
21 additions
and
56 deletions
Show diff stats
Gemfile
| @@ -18,6 +18,7 @@ gem "six" | @@ -18,6 +18,7 @@ gem "six" | ||
| 18 | gem "therubyracer" | 18 | gem "therubyracer" |
| 19 | gem "faker" | 19 | gem "faker" |
| 20 | gem "seed-fu" | 20 | gem "seed-fu" |
| 21 | +gem "linguist", "~> 1.0.0", :git => "https://github.com/github/linguist.git" | ||
| 21 | gem "pygments.rb", "0.2.7" | 22 | gem "pygments.rb", "0.2.7" |
| 22 | gem "thin" | 23 | gem "thin" |
| 23 | gem "unicorn" | 24 | gem "unicorn" |
Gemfile.lock
| @@ -5,6 +5,16 @@ GIT | @@ -5,6 +5,16 @@ GIT | ||
| 5 | annotate (2.4.1.beta1) | 5 | annotate (2.4.1.beta1) |
| 6 | 6 | ||
| 7 | GIT | 7 | GIT |
| 8 | + remote: https://github.com/github/linguist.git | ||
| 9 | + revision: c444c25b27131cd2aca6017f2a9ce5eae60dfcd3 | ||
| 10 | + specs: | ||
| 11 | + linguist (1.0.0) | ||
| 12 | + charlock_holmes (~> 0.6.6) | ||
| 13 | + escape_utils (~> 0.2.3) | ||
| 14 | + mime-types (~> 1.18) | ||
| 15 | + pygments.rb (~> 0.2.11) | ||
| 16 | + | ||
| 17 | +GIT | ||
| 8 | remote: https://github.com/gitlabhq/gitolite-client.git | 18 | remote: https://github.com/gitlabhq/gitolite-client.git |
| 9 | revision: 36dabd226caa40ff052677719adaacbfe667b36c | 19 | revision: 36dabd226caa40ff052677719adaacbfe667b36c |
| 10 | specs: | 20 | specs: |
| @@ -104,6 +114,7 @@ GEM | @@ -104,6 +114,7 @@ GEM | ||
| 104 | diff-lcs (1.1.3) | 114 | diff-lcs (1.1.3) |
| 105 | drapper (0.8.4) | 115 | drapper (0.8.4) |
| 106 | erubis (2.7.0) | 116 | erubis (2.7.0) |
| 117 | + escape_utils (0.2.4) | ||
| 107 | eventmachine (0.12.10) | 118 | eventmachine (0.12.10) |
| 108 | execjs (1.3.0) | 119 | execjs (1.3.0) |
| 109 | multi_json (~> 1.0) | 120 | multi_json (~> 1.0) |
| @@ -326,6 +337,7 @@ DEPENDENCIES | @@ -326,6 +337,7 @@ DEPENDENCIES | ||
| 326 | kaminari | 337 | kaminari |
| 327 | launchy | 338 | launchy |
| 328 | letter_opener | 339 | letter_opener |
| 340 | + linguist (~> 1.0.0)! | ||
| 329 | modularity | 341 | modularity |
| 330 | mysql2 | 342 | mysql2 |
| 331 | omniauth-ldap | 343 | omniauth-ldap |
app/views/refs/_tree_file.html.haml
| @@ -11,10 +11,10 @@ | @@ -11,10 +11,10 @@ | ||
| 11 | - if file.text? | 11 | - if file.text? |
| 12 | .view_file_content | 12 | .view_file_content |
| 13 | - unless file.empty? | 13 | - unless file.empty? |
| 14 | - %div{:class => current_user.dark_scheme ? "black" : "white"} | ||
| 15 | - = preserve do | ||
| 16 | - = raw file.colorize | ||
| 17 | - - else | 14 | + %div{:class => current_user.dark_scheme ? "black" : "white"} |
| 15 | + = preserve do | ||
| 16 | + = raw file.colorize(options: { linenos: 'True'}) | ||
| 17 | + - else | ||
| 18 | %h3 | 18 | %h3 |
| 19 | %center Empty file | 19 | %center Empty file |
| 20 | - elsif file.image? | 20 | - elsif file.image? |
app/views/snippets/show.html.haml
| @@ -13,8 +13,7 @@ | @@ -13,8 +13,7 @@ | ||
| 13 | .view_file_header | 13 | .view_file_header |
| 14 | %strong= @snippet.file_name | 14 | %strong= @snippet.file_name |
| 15 | .view_file_content | 15 | .view_file_content |
| 16 | - %div{:class => current_user.dark_scheme ? "black" : ""} | ||
| 17 | - :erb | ||
| 18 | - <%= raw @snippet.colorize %> | 16 | + %div{:class => current_user.dark_scheme ? "black" : ""} |
| 17 | + = raw @snippet.colorize(options: { linenos: 'True'}) | ||
| 19 | 18 | ||
| 20 | = render "notes/notes", :tid => @snippet.id, :tt => "snippet" | 19 | = render "notes/notes", :tid => @snippet.id, :tt => "snippet" |
config/initializers/gitlabhq/20_grit_ext.rb
| 1 | require 'grit' | 1 | require 'grit' |
| 2 | -require 'pygments' | ||
| 3 | -require "utils" | ||
| 4 | 2 | ||
| 5 | Grit::Blob.class_eval do | 3 | Grit::Blob.class_eval do |
| 6 | - include Utils::FileHelper | ||
| 7 | - include Utils::Colorize | 4 | + include Linguist::BlobHelper |
| 8 | end | 5 | end |
| 9 | 6 | ||
| 10 | #monkey patch raw_object from string | 7 | #monkey patch raw_object from string |
| @@ -15,7 +12,7 @@ Grit::GitRuby::Internal::RawObject.class_eval do | @@ -15,7 +12,7 @@ Grit::GitRuby::Internal::RawObject.class_eval do | ||
| 15 | end | 12 | end |
| 16 | 13 | ||
| 17 | 14 | ||
| 18 | -Grit::Diff.class_eval do | 15 | +Grit::Diff.class_eval do |
| 19 | def old_path | 16 | def old_path |
| 20 | Gitlabhq::Encode.utf8 a_path | 17 | Gitlabhq::Encode.utf8 a_path |
| 21 | end | 18 | end |
lib/utils.rb
| @@ -1,44 +0,0 @@ | @@ -1,44 +0,0 @@ | ||
| 1 | -module Utils | ||
| 2 | - module FileHelper | ||
| 3 | - def binary?(string) | ||
| 4 | - string.each_byte do |x| | ||
| 5 | - x.nonzero? or return true | ||
| 6 | - end | ||
| 7 | - false | ||
| 8 | - end | ||
| 9 | - | ||
| 10 | - def image? | ||
| 11 | - mime_type =~ /image/ | ||
| 12 | - end | ||
| 13 | - | ||
| 14 | - def text? | ||
| 15 | - mime_type =~ /application|text/ && !binary?(data) | ||
| 16 | - end | ||
| 17 | - end | ||
| 18 | - | ||
| 19 | - module Colorize | ||
| 20 | - def colorize | ||
| 21 | - system_colorize(data, name) | ||
| 22 | - end | ||
| 23 | - | ||
| 24 | - def system_colorize(data, file_name) | ||
| 25 | - options = { :encoding => 'utf-8', :linenos => 'True' } | ||
| 26 | - | ||
| 27 | - # Try detect language with pygments | ||
| 28 | - Pygments.highlight data, :filename => file_name, :options => options | ||
| 29 | - rescue | ||
| 30 | - # if it fails use manual detection | ||
| 31 | - ft = handle_file_type(file_name) | ||
| 32 | - Pygments.highlight(data, :lexer => ft, :options => options) | ||
| 33 | - end | ||
| 34 | - | ||
| 35 | - def handle_file_type(file_name) | ||
| 36 | - case file_name | ||
| 37 | - when /(\.ru|Gemfile)$/ | ||
| 38 | - :ruby | ||
| 39 | - else | ||
| 40 | - :text | ||
| 41 | - end | ||
| 42 | - end | ||
| 43 | - end | ||
| 44 | -end |