diff options
author | Douwe Maan <douwe@selenight.nl> | 2016-06-20 19:22:39 +0200 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2016-07-06 18:51:00 -0400 |
commit | 710c4886911682742d439b15c5a7add7ca0bd898 (patch) | |
tree | 36c238f097c9ccb8cf328f6918810e06cf131444 /app/services/notes | |
parent | 8d7dc26d39b65b3ef6e8ec80ed5995ae307c3d3c (diff) | |
download | gitlab-ce-710c4886911682742d439b15c5a7add7ca0bd898.tar.gz |
Automatically update diff note positions when MR is pushed to
Diffstat (limited to 'app/services/notes')
-rw-r--r-- | app/services/notes/diff_position_update_service.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/app/services/notes/diff_position_update_service.rb b/app/services/notes/diff_position_update_service.rb new file mode 100644 index 00000000000..0cb731f5bc3 --- /dev/null +++ b/app/services/notes/diff_position_update_service.rb @@ -0,0 +1,30 @@ +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 |