Merge branch 'zj-large-files-no-highlight' into 'master'
Properly handle bigger files Closes #3967 See merge request !3718
This commit is contained in:
commit
10f84f99cb
7 changed files with 44 additions and 16 deletions
|
@ -11,6 +11,7 @@ v 8.8.0 (unreleased)
|
||||||
- Allow "NEWS" and "CHANGES" as alternative names for CHANGELOG. !3768 (Connor Shea)
|
- Allow "NEWS" and "CHANGES" as alternative names for CHANGELOG. !3768 (Connor Shea)
|
||||||
- Added button to toggle whitespaces changes on diff view
|
- Added button to toggle whitespaces changes on diff view
|
||||||
- Backport GitLab Enterprise support from EE
|
- Backport GitLab Enterprise support from EE
|
||||||
|
- Files over 5MB can only be viewed in their raw form, files over 1MB without highlighting !3718
|
||||||
|
|
||||||
v 8.7.1 (unreleased)
|
v 8.7.1 (unreleased)
|
||||||
- Throttle the update of `project.last_activity_at` to 1 minute. !3848
|
- Throttle the update of `project.last_activity_at` to 1 minute. !3848
|
||||||
|
|
|
@ -3,8 +3,8 @@ module BlobHelper
|
||||||
Gitlab::Highlight.new(blob_name, blob_content, nowrap: nowrap)
|
Gitlab::Highlight.new(blob_name, blob_content, nowrap: nowrap)
|
||||||
end
|
end
|
||||||
|
|
||||||
def highlight(blob_name, blob_content, nowrap: false)
|
def highlight(blob_name, blob_content, nowrap: false, plain: false)
|
||||||
Gitlab::Highlight.highlight(blob_name, blob_content, nowrap: nowrap)
|
Gitlab::Highlight.highlight(blob_name, blob_content, nowrap: nowrap, plain: plain)
|
||||||
end
|
end
|
||||||
|
|
||||||
def no_highlight_files
|
def no_highlight_files
|
||||||
|
|
|
@ -19,6 +19,14 @@ class Blob < SimpleDelegator
|
||||||
new(blob)
|
new(blob)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def no_highlighting?
|
||||||
|
size && size > 1.megabyte
|
||||||
|
end
|
||||||
|
|
||||||
|
def only_display_raw?
|
||||||
|
size && size > 5.megabytes
|
||||||
|
end
|
||||||
|
|
||||||
def svg?
|
def svg?
|
||||||
text? && language && language.name == 'SVG'
|
text? && language && language.name == 'SVG'
|
||||||
end
|
end
|
||||||
|
|
|
@ -112,6 +112,10 @@ class Snippet < ActiveRecord::Base
|
||||||
visibility_level
|
visibility_level
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def no_highlighting?
|
||||||
|
content.lines.count > 1000
|
||||||
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
# Searches for snippets with a matching title or file name.
|
# Searches for snippets with a matching title or file name.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,10 +1,19 @@
|
||||||
- blob.load_all_data!(@repository)
|
- if blob.only_display_raw?
|
||||||
- if markup?(blob.name)
|
.file-content.code
|
||||||
.file-content.wiki
|
.nothing-here-block
|
||||||
= render_markup(blob.name, blob.data)
|
File too large, you can
|
||||||
|
= succeed '.' do
|
||||||
|
= link_to 'view the raw file', namespace_project_raw_path(@project.namespace, @project, @id), target: '_blank'
|
||||||
|
|
||||||
- else
|
- else
|
||||||
- unless blob.empty?
|
- blob.load_all_data!(@repository)
|
||||||
= render 'shared/file_highlight', blob: blob
|
|
||||||
|
- if markup?(blob.name)
|
||||||
|
.file-content.wiki
|
||||||
|
= render_markup(blob.name, blob.data)
|
||||||
- else
|
- else
|
||||||
.file-content.code
|
- if blob.empty?
|
||||||
.nothing-here-block Empty file
|
.file-content.code
|
||||||
|
.nothing-here-block Empty file
|
||||||
|
- else
|
||||||
|
= render 'shared/file_highlight', blob: blob
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
.file-content.code.js-syntax-highlight
|
.file-content.code.js-syntax-highlight
|
||||||
.line-numbers
|
.line-numbers
|
||||||
- if blob.data.present?
|
- if blob.data.present?
|
||||||
|
- link_icon = icon('link')
|
||||||
- blob.data.each_line.each_with_index do |_, index|
|
- blob.data.each_line.each_with_index do |_, index|
|
||||||
- offset = defined?(first_line_number) ? first_line_number : 1
|
- offset = defined?(first_line_number) ? first_line_number : 1
|
||||||
- i = index + offset
|
- i = index + offset
|
||||||
-# We're not using `link_to` because it is too slow once we get to thousands of lines.
|
-# We're not using `link_to` because it is too slow once we get to thousands of lines.
|
||||||
%a.diff-line-num{href: "#L#{i}", id: "L#{i}", 'data-line-number' => i}
|
%a.diff-line-num{href: "#L#{i}", id: "L#{i}", 'data-line-number' => i}
|
||||||
%i.fa.fa-link
|
= link_icon
|
||||||
= i
|
= i
|
||||||
.blob-content{data: {blob_id: blob.id}}
|
.blob-content{data: {blob_id: blob.id}}
|
||||||
= highlight(blob.name, blob.data)
|
= highlight(blob.name, blob.data, plain: blob.no_highlighting?)
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
module Gitlab
|
module Gitlab
|
||||||
class Highlight
|
class Highlight
|
||||||
def self.highlight(blob_name, blob_content, nowrap: true)
|
def self.highlight(blob_name, blob_content, nowrap: true, plain: false)
|
||||||
new(blob_name, blob_content, nowrap: nowrap).highlight(blob_content, continue: false)
|
new(blob_name, blob_content, nowrap: nowrap).
|
||||||
|
highlight(blob_content, continue: false, plain: plain)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.highlight_lines(repository, ref, file_name)
|
def self.highlight_lines(repository, ref, file_name)
|
||||||
|
@ -17,8 +18,12 @@ module Gitlab
|
||||||
@lexer = Rouge::Lexer.guess(filename: blob_name, source: blob_content).new rescue Rouge::Lexers::PlainText
|
@lexer = Rouge::Lexer.guess(filename: blob_name, source: blob_content).new rescue Rouge::Lexers::PlainText
|
||||||
end
|
end
|
||||||
|
|
||||||
def highlight(text, continue: true)
|
def highlight(text, continue: true, plain: false)
|
||||||
@formatter.format(@lexer.lex(text, continue: continue)).html_safe
|
if plain
|
||||||
|
@formatter.format(Rouge::Lexers::PlainText.lex(text)).html_safe
|
||||||
|
else
|
||||||
|
@formatter.format(@lexer.lex(text, continue: continue)).html_safe
|
||||||
|
end
|
||||||
rescue
|
rescue
|
||||||
@formatter.format(Rouge::Lexers::PlainText.lex(text)).html_safe
|
@formatter.format(Rouge::Lexers::PlainText.lex(text)).html_safe
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue