diff options
author | Grzegorz Bizon <grzegorz@gitlab.com> | 2017-06-01 14:00:00 +0000 |
---|---|---|
committer | Grzegorz Bizon <grzegorz@gitlab.com> | 2017-06-01 14:00:00 +0000 |
commit | 0218a0bd2308eaa1b968cc0e0c68fdb88788df56 (patch) | |
tree | 9c69bde0abe23fc0ac6a64726cdefac5fd0807ad /app/services | |
parent | f07aee72bef4604312e11a43fce3a47865bce100 (diff) | |
parent | 09838ac626df739f0ab9852e3c7d862c7fd707e5 (diff) | |
download | gitlab-ce-0218a0bd2308eaa1b968cc0e0c68fdb88788df56.tar.gz |
Merge branch 'dm-update-discussion-diff-position' into 'master'
Update diff discussion position per discussion instead of per note
Closes #33157
See merge request !11833
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/discussions/update_diff_position_service.rb | 41 | ||||
-rw-r--r-- | app/services/notes/diff_position_update_service.rb | 33 |
2 files changed, 41 insertions, 33 deletions
diff --git a/app/services/discussions/update_diff_position_service.rb b/app/services/discussions/update_diff_position_service.rb new file mode 100644 index 00000000000..1ef8d9edbe1 --- /dev/null +++ b/app/services/discussions/update_diff_position_service.rb @@ -0,0 +1,41 @@ +module Discussions + class UpdateDiffPositionService < BaseService + def execute(discussion) + result = tracer.trace(discussion.position) + return unless result + + position = result[:position] + outdated = result[:outdated] + + discussion.notes.each do |note| + if outdated + note.change_position = position + else + note.position = position + note.change_position = nil + end + end + + Note.transaction do + discussion.notes.each do |note| + Gitlab::Timeless.timeless(note, &:save) + end + + if outdated && current_user + SystemNoteService.diff_discussion_outdated(discussion, project, current_user, position) + end + end + end + + private + + def tracer + @tracer ||= Gitlab::Diff::PositionTracer.new( + project: project, + old_diff_refs: params[:old_diff_refs], + new_diff_refs: params[:new_diff_refs], + paths: params[:paths] + ) + end + end +end diff --git a/app/services/notes/diff_position_update_service.rb b/app/services/notes/diff_position_update_service.rb deleted file mode 100644 index eff7b287269..00000000000 --- a/app/services/notes/diff_position_update_service.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Notes - class DiffPositionUpdateService < BaseService - def execute(note) - results = tracer.trace(note.position) - return unless results - - position = results[:position] - outdated = results[:outdated] - - if outdated - note.change_position = position - - if note.persisted? && current_user - SystemNoteService.diff_discussion_outdated(note.to_discussion, project, current_user, position) - end - else - note.position = position - note.change_position = nil - end - end - - private - - def tracer - @tracer ||= Gitlab::Diff::PositionTracer.new( - project: project, - old_diff_refs: params[:old_diff_refs], - new_diff_refs: params[:new_diff_refs], - paths: params[:paths] - ) - end - end -end |