1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
.diff-file.file-holder{id: "diff-#{index}", data: diff_file_html_data(project, diff_file.file_path, diff_commit.id)}
.file-title{id: "file-path-#{hexdigest(diff_file.file_path)}"}
= render "projects/diffs/file_header", diff_file: diff_file, blob: blob, diff_commit: diff_commit, project: project, url: "#diff-#{index}"
- unless diff_file.submodule?
.file-actions.hidden-xs
- if blob_text_viewable?(blob)
= link_to '#', class: 'js-toggle-diff-comments btn active has-tooltip btn-file-option', title: "Toggle comments for this file" do
= icon('comment')
\
- if editable_diff?(diff_file)
- link_opts = @merge_request.id ? { from_merge_request_id: @merge_request.id } : {}
= edit_blob_link(@merge_request.source_project, @merge_request.source_branch, diff_file.new_path,
blob: blob, link_opts: link_opts)
= view_file_btn(diff_commit.id, diff_file.new_path, project)
- cache_key = [diff_file.diff_refs.base_sha, diff_file.diff_refs.start_sha, diff_file.diff_refs.head_sha, diff_file.file_path, diff_view]
- content_html = Rails.cache.fetch(cache_key) do
- render 'projects/diffs/content', diff_file: diff_file, diff_commit: diff_commit, blob: blob, project: project
- unless @diff_notes_disabled
- if discussions = @grouped_diff_discussions
- discussions = discussions.values.flatten.group_by { |d| d.diff_file.file_path } if discussions
- discussions = discussions[diff_file.file_path] if discussions
- if discussions
- if diff_view == :inline
- discussions.each do |discussion|
- discussion_html = render "discussions/diff_discussion", discussion: discussion, expanded: true
- content_html.sub!(/<!--\ninject discussions #{discussion.line_code}\n-->/, discussion_html)
- elsif diff_view == :parallel
- diff_file.parallel_diff_lines.each do |line|
- left = line[:left]
- right = line[:right]
- if left || right
- discussions.each do |_discussion|
- discussion_left, discussion_right = parallel_diff_discussions(left, right, diff_file)
- if discussion_left || discussion_right
- # Delete already rendered discussion from the original collection
- @grouped_diff_discussions.delete(discussion_left.try(:line_code))
- @grouped_diff_discussions.delete(discussion_right.try(:line_code))
- discussion_html = render "discussions/parallel_diff_discussion", discussion_left: discussion_left, discussion_right: discussion_right
- content_html.sub!(/<!--\ninject discussions\s#{discussion_left.try(:line_code) || '.*'}\s\|\s#{discussion_right.try(:line_code) || '.*'}\n-->/, discussion_html)
- content_html.gsub!(/<!--\ninject discussions\s.*\n-->/, '')
=raw content_html
|