31 lines
781 B
Ruby
31 lines
781 B
Ruby
|
module Notes
|
||
|
class DiffPositionUpdateService < BaseService
|
||
|
def execute(note)
|
||
|
new_position = tracer.trace(note.position)
|
||
|
|
||
|
# Don't update the position if the type doesn't match, since that means
|
||
|
# the diff line commented on was changed, and the comment is now outdated
|
||
|
old_position = note.position
|
||
|
if new_position &&
|
||
|
new_position != old_position &&
|
||
|
new_position.type == old_position.type
|
||
|
|
||
|
note.position = new_position
|
||
|
end
|
||
|
|
||
|
note
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def tracer
|
||
|
@tracer ||= Gitlab::Diff::PositionTracer.new(
|
||
|
repository: project.repository,
|
||
|
old_diff_refs: params[:old_diff_refs],
|
||
|
new_diff_refs: params[:new_diff_refs],
|
||
|
paths: params[:paths]
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
end
|