Module: DiffHelper

Included in:
Projects::CommitController, Projects::CompareController, Projects::MergeRequestsController
Defined in:
app/helpers/diff_helper.rb

Instance Method Summary collapse

Instance Method Details

#commit_for_diff(diff) ⇒ Object


99
100
101
102
103
104
105
# File 'app/helpers/diff_helper.rb', line 99

def commit_for_diff(diff)
  if diff.deleted_file
    @base_commit || @commit.parent || @commit
  else
    @commit
  end
end

#diff_file_html_data(project, diff_commit, diff_file) ⇒ Object


107
108
109
110
111
112
# File 'app/helpers/diff_helper.rb', line 107

def diff_file_html_data(project, diff_commit, diff_file)
  {
    blob_diff_path: namespace_project_blob_diff_path(project.namespace, project,
                                                     tree_join(diff_commit.id, diff_file.file_path))
  }
end

#diff_hard_limit_enabled?Boolean

Returns:

  • (Boolean)

21
22
23
# File 'app/helpers/diff_helper.rb', line 21

def diff_hard_limit_enabled?
  params[:force_show_diff].present?
end

#diff_line_content(line, line_type = nil) ⇒ Object


49
50
51
52
53
54
55
56
# File 'app/helpers/diff_helper.rb', line 49

def diff_line_content(line, line_type = nil)
  if line.blank?
    "  ".html_safe
  else
    line[0] = ' ' if %w[new old].include?(line_type)
    line
  end
end

#diff_optionsObject


25
26
27
28
29
30
31
# File 'app/helpers/diff_helper.rb', line 25

def diff_options
  options = { ignore_whitespace_change: hide_whitespace? }
  if diff_hard_limit_enabled?
    options.merge!(Commit.max_diff_options)
  end
  options
end

#diff_viewObject


11
12
13
14
15
16
17
18
19
# File 'app/helpers/diff_helper.rb', line 11

def diff_view
  diff_views = %w(inline parallel)

  if diff_views.include?(cookies[:diff_view])
    cookies[:diff_view]
  else
    diff_views.first
  end
end

#editable_diff?(diff) ⇒ Boolean

Returns:

  • (Boolean)

114
115
116
# File 'app/helpers/diff_helper.rb', line 114

def editable_diff?(diff)
  !diff.deleted_file && @merge_request && @merge_request.source_project
end

#generate_line_code(file_path, line) ⇒ Object


37
38
39
# File 'app/helpers/diff_helper.rb', line 37

def generate_line_code(file_path, line)
  Gitlab::Diff::LineCode.generate(file_path, line.new_pos, line.old_pos)
end

#inline_diff_btnObject


76
77
78
# File 'app/helpers/diff_helper.rb', line 76

def inline_diff_btn
  diff_btn('Inline', 'inline', diff_view == 'inline')
end

#line_commentsObject


58
59
60
# File 'app/helpers/diff_helper.rb', line 58

def line_comments
  @line_comments ||= @line_notes.select(&:active?).sort_by(&:created_at).group_by(&:line_code)
end

#mark_inline_diffs(old_line, new_line) ⇒ Object


2
3
4
5
6
7
8
9
# File 'app/helpers/diff_helper.rb', line 2

def mark_inline_diffs(old_line, new_line)
  old_diffs, new_diffs = Gitlab::Diff::InlineDiff.new(old_line, new_line).inline_diffs

  marked_old_line = Gitlab::Diff::InlineDiffMarker.new(old_line).mark(old_diffs)
  marked_new_line = Gitlab::Diff::InlineDiffMarker.new(new_line).mark(new_diffs)

  [marked_old_line, marked_new_line]
end

#organize_comments(type_left, type_right, line_code_left, line_code_right) ⇒ Object


62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/helpers/diff_helper.rb', line 62

def organize_comments(type_left, type_right, line_code_left, line_code_right)
  comments_left = comments_right = nil

  unless type_left.nil? && type_right == 'new'
    comments_left = line_comments[line_code_left]
  end

  unless type_left.nil? && type_right.nil?
    comments_right = line_comments[line_code_right]
  end

  [comments_left, comments_right]
end

#parallel_diff_btnObject


80
81
82
# File 'app/helpers/diff_helper.rb', line 80

def parallel_diff_btn
  diff_btn('Side-by-side', 'parallel', diff_view == 'parallel')
end

#safe_diff_files(diffs, diff_refs) ⇒ Object


33
34
35
# File 'app/helpers/diff_helper.rb', line 33

def safe_diff_files(diffs, diff_refs)
  diffs.decorate! { |diff| Gitlab::Diff::File.new(diff, diff_refs) }
end

84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'app/helpers/diff_helper.rb', line 84

def submodule_link(blob, ref, repository = @repository)
  tree, commit = submodule_links(blob, ref, repository)
  commit_id = if commit.nil?
                Commit.truncate_sha(blob.id)
              else
                link_to Commit.truncate_sha(blob.id), commit
              end

  [
    (:span, link_to(truncate(blob.name, length: 40), tree)),
    '@',
    (:span, commit_id, class: 'monospace'),
  ].join(' ').html_safe
end

#unfold_bottom_class(bottom) ⇒ Object


41
42
43
# File 'app/helpers/diff_helper.rb', line 41

def unfold_bottom_class(bottom)
  (bottom) ? 'js-unfold-bottom' : ''
end

#unfold_class(unfold) ⇒ Object


45
46
47
# File 'app/helpers/diff_helper.rb', line 45

def unfold_class(unfold)
  (unfold) ? 'unfold js-unfold' : ''
end