summaryrefslogtreecommitdiff
path: root/app/controllers/notes_controller.rb
diff options
context:
space:
mode:
authorRiyad Preukschas <riyad@informatik.uni-bremen.de>2012-10-29 15:56:17 +0100
committerRiyad Preukschas <riyad@informatik.uni-bremen.de>2012-12-03 22:51:55 +0100
commita58385247d06b238296e35c17c9e3f58b3234094 (patch)
treeded455ddc9fdb3c85c84a4a0eb39c84f8f5401d9 /app/controllers/notes_controller.rb
parent9b919939a35f9e5606f86a09eafa2a392d40d1a7 (diff)
downloadgitlab-ce-a58385247d06b238296e35c17c9e3f58b3234094.tar.gz
Add discussions for merge requests to notes controller
Diffstat (limited to 'app/controllers/notes_controller.rb')
-rw-r--r--app/controllers/notes_controller.rb39
1 files changed, 35 insertions, 4 deletions
diff --git a/app/controllers/notes_controller.rb b/app/controllers/notes_controller.rb
index d794f368f57..79e8bcc7866 100644
--- a/app/controllers/notes_controller.rb
+++ b/app/controllers/notes_controller.rb
@@ -6,10 +6,15 @@ class NotesController < ProjectResourceController
respond_to :js
def index
- notes
+ @notes = Notes::LoadContext.new(project, current_user, params).execute
+
if params[:target_type] == "merge_request"
- @mixed_targets = true
+ @mixed_targets = true
@main_target_type = params[:target_type].camelize
+ @discussions = discussions_from_notes
+ @has_diff = true
+ elsif params[:target_type] == "commit"
+ @has_diff = true
end
respond_with(@notes)
@@ -40,7 +45,33 @@ class NotesController < ProjectResourceController
protected
- def notes
- @notes = Notes::LoadContext.new(project, current_user, params).execute
+ def discussion_notes_for(note)
+ @notes.select do |other_note|
+ note.discussion_id == other_note.discussion_id
+ end
+ end
+
+ def discussions_from_notes
+ discussion_ids = []
+ discussions = []
+
+ @notes.each do |note|
+ next if discussion_ids.include?(note.discussion_id)
+
+ # don't group notes for the main target
+ if for_main_target?(note)
+ discussions << [note]
+ else
+ discussions << discussion_notes_for(note)
+ discussion_ids << note.discussion_id
+ end
+ end
+
+ discussions
+ end
+
+ # Helps to distinguish e.g. commit notes in mr notes list
+ def for_main_target?(note)
+ !@mixed_targets || (@main_target_type == note.noteable_type && !note.for_diff_line?)
end
end