summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/api/builds.rb2
-rw-r--r--lib/banzai/reference_extractor.rb9
-rw-r--r--lib/gitlab/diff/parallel_diff.rb63
3 files changed, 16 insertions, 58 deletions
diff --git a/lib/api/builds.rb b/lib/api/builds.rb
index 657d421fe97..be5a3484ec8 100644
--- a/lib/api/builds.rb
+++ b/lib/api/builds.rb
@@ -80,7 +80,7 @@ module API
# ref_name (required) - The ref from repository
# job (required) - The name for the build
# Example Request:
- # GET /projects/:id/artifacts/:ref_name/download?job=name
+ # GET /projects/:id/builds/artifacts/:ref_name/download?job=name
get ':id/builds/artifacts/:ref_name/download',
requirements: { ref_name: /.+/ } do
authorize_read_builds!
diff --git a/lib/banzai/reference_extractor.rb b/lib/banzai/reference_extractor.rb
index bf366962aef..b26a41a1f3b 100644
--- a/lib/banzai/reference_extractor.rb
+++ b/lib/banzai/reference_extractor.rb
@@ -2,11 +2,11 @@ module Banzai
# Extract possible GFM references from an arbitrary String for further processing.
class ReferenceExtractor
def initialize
- @texts = []
+ @texts_and_contexts = []
end
def analyze(text, context = {})
- @texts << Renderer.render(text, context)
+ @texts_and_contexts << { text: text, context: context }
end
def references(type, project, current_user = nil)
@@ -21,9 +21,10 @@ module Banzai
def html_documents
# This ensures that we don't memoize anything until we have a number of
# text blobs to parse.
- return [] if @texts.empty?
+ return [] if @texts_and_contexts.empty?
- @html_documents ||= @texts.map { |html| Nokogiri::HTML.fragment(html) }
+ @html_documents ||= Renderer.cache_collection_render(@texts_and_contexts)
+ .map { |html| Nokogiri::HTML.fragment(html) }
end
end
end
diff --git a/lib/gitlab/diff/parallel_diff.rb b/lib/gitlab/diff/parallel_diff.rb
index b069afdd28c..481536a380b 100644
--- a/lib/gitlab/diff/parallel_diff.rb
+++ b/lib/gitlab/diff/parallel_diff.rb
@@ -8,72 +8,35 @@ module Gitlab
end
def parallelize
-
i = 0
free_right_index = nil
lines = []
highlighted_diff_lines = diff_file.highlighted_diff_lines
highlighted_diff_lines.each do |line|
- line_code = diff_file.line_code(line)
- position = diff_file.position(line)
-
- case line.type
- when 'match', nil
+ if line.meta? || line.unchanged?
# line in the right panel is the same as in the left one
lines << {
- left: {
- type: line.type,
- number: line.old_pos,
- text: line.text,
- line_code: line_code,
- position: position
- },
- right: {
- type: line.type,
- number: line.new_pos,
- text: line.text,
- line_code: line_code,
- position: position
- }
+ left: line,
+ right: line
}
free_right_index = nil
i += 1
- when 'old'
+ elsif line.removed?
lines << {
- left: {
- type: line.type,
- number: line.old_pos,
- text: line.text,
- line_code: line_code,
- position: position
- },
- right: {
- type: nil,
- number: nil,
- text: "",
- line_code: line_code,
- position: position
- }
+ left: line,
+ right: nil
}
# Once we come upon a new line it can be put on the right of this old line
free_right_index ||= i
i += 1
- when 'new'
- data = {
- type: line.type,
- number: line.new_pos,
- text: line.text,
- line_code: line_code,
- position: position
- }
-
+ elsif line.added?
if free_right_index
# If an old line came before this without a line on the right, this
# line can be put to the right of it.
- lines[free_right_index][:right] = data
+ lines[free_right_index][:right] = line
# If there are any other old lines on the left that don't yet have
# a new counterpart on the right, update the free_right_index
@@ -81,14 +44,8 @@ module Gitlab
free_right_index = next_free_right_index < i ? next_free_right_index : nil
else
lines << {
- left: {
- type: nil,
- number: nil,
- text: "",
- line_code: line_code,
- position: position
- },
- right: data
+ left: nil,
+ right: line
}
free_right_index = nil