Module: DiffPositionableNote
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/diff_positionable_note.rb
Instance Method Summary collapse
- #active?(diff_refs = nil) ⇒ Boolean
- #diff_refs_match_commit ⇒ Object
- #keep_around_commits ⇒ Object
- #on_file? ⇒ Boolean
- #on_image? ⇒ Boolean
- #on_text? ⇒ Boolean
- #repository ⇒ Object
- #set_original_position ⇒ Object
- #shas ⇒ Object
- #should_update_position? ⇒ Boolean
- #supported? ⇒ Boolean
- #update_position ⇒ Object
Instance Method Details
#active?(diff_refs = nil) ⇒ 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_commit ⇒ Object
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_commits ⇒ Object
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
49 50 51 |
# File 'app/models/concerns/diff_positionable_note.rb', line 49 def on_file? !!position&.on_file? end |
#on_image? ⇒ Boolean
53 54 55 |
# File 'app/models/concerns/diff_positionable_note.rb', line 53 def on_image? !!position&.on_image? end |
#on_text? ⇒ Boolean
45 46 47 |
# File 'app/models/concerns/diff_positionable_note.rb', line 45 def on_text? !!position&.on_text? end |
#repository ⇒ Object
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_position ⇒ Object
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 |
#shas ⇒ Object
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
41 42 43 |
# File 'app/models/concerns/diff_positionable_note.rb', line 41 def should_update_position? on_text? || on_file? end |
#supported? ⇒ 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_position ⇒ Object
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 |