Module: DiffPositionableNote

Extended by:
ActiveSupport::Concern
Included in:
DiffNote, DraftNote
Defined in:
app/models/concerns/diff_positionable_note.rb

Instance Method Summary collapse

Instance Method Details

#active?(diff_refs = nil) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
64
65
66
67
68
# File 'app/models/concerns/diff_positionable_note.rb', line 61

def active?(diff_refs = nil)
  return false unless supported?
  return true if for_commit?

  diff_refs ||= noteable.diff_refs

  self.position.diff_refs == diff_refs
end

#diff_refs_match_commitObject



100
101
102
103
104
# File 'app/models/concerns/diff_positionable_note.rb', line 100

def diff_refs_match_commit
  return if self.original_position.diff_refs == commit&.diff_refs

  errors.add(:commit_id, 'does not match the diff refs')
end

#keep_around_commitsObject



106
107
108
# File 'app/models/concerns/diff_positionable_note.rb', line 106

def keep_around_commits
  repository.keep_around(*shas, source: "#{noteable_type}/#{self.class.name}")
end

#on_file?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'app/models/concerns/diff_positionable_note.rb', line 49

def on_file?
  !!position&.on_file?
end

#on_image?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'app/models/concerns/diff_positionable_note.rb', line 53

def on_image?
  !!position&.on_image?
end

#on_text?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'app/models/concerns/diff_positionable_note.rb', line 45

def on_text?
  !!position&.on_text?
end

#repositoryObject



110
111
112
# File 'app/models/concerns/diff_positionable_note.rb', line 110

def repository
  noteable.respond_to?(:repository) ? noteable.repository : project.repository
end

#set_original_positionObject



70
71
72
73
74
# File 'app/models/concerns/diff_positionable_note.rb', line 70

def set_original_position
  return unless position

  self.original_position = self.position.dup unless self.original_position&.complete?
end

#shasObject



114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'app/models/concerns/diff_positionable_note.rb', line 114

def shas
  [
    original_position.base_sha,
    original_position.start_sha,
    original_position.head_sha
  ].tap do |a|
    if position != original_position
      a << position.base_sha
      a << position.start_sha
      a << position.head_sha
    end
  end
end

#should_update_position?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'app/models/concerns/diff_positionable_note.rb', line 41

def should_update_position?
  on_text? || on_file?
end

#supported?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'app/models/concerns/diff_positionable_note.rb', line 57

def supported?
  for_commit? || self.noteable.has_complete_diff_refs?
end

#update_positionObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'app/models/concerns/diff_positionable_note.rb', line 76

def update_position
  return unless supported?
  return if for_commit?

  return if active?
  return unless position

  tracer = Gitlab::Diff::PositionTracer.new(
    project: self.project,
    old_diff_refs: self.position.diff_refs,
    new_diff_refs: self.noteable.diff_refs,
    paths: self.position.paths
  )

  result = tracer.trace(self.position)
  return unless result

  if result[:outdated]
    self.change_position = result[:position]
  else
    self.position = result[:position]
  end
end