Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/notes/create_service.rb')
-rw-r--r--app/services/notes/create_service.rb13
1 files changed, 11 insertions, 2 deletions
diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb
index 04b7fba207b..488c847dcbb 100644
--- a/app/services/notes/create_service.rb
+++ b/app/services/notes/create_service.rb
@@ -27,7 +27,11 @@ module Notes
end
note_saved = note.with_transaction_returning_status do
- !only_commands && note.save
+ break false if only_commands
+
+ note.save.tap do
+ update_discussions(note)
+ end
end
when_saved(note) if note_saved
@@ -54,12 +58,17 @@ module Notes
@quick_actions_service ||= QuickActionsService.new(project, current_user)
end
- def when_saved(note)
+ def update_discussions(note)
+ # Ensure that individual notes that are promoted into discussions are
+ # updated in a transaction with the note creation to avoid inconsistencies:
+ # https://gitlab.com/gitlab-org/gitlab/-/issues/301237
if note.part_of_discussion? && note.discussion.can_convert_to_discussion?
note.discussion.convert_to_discussion!.save
note.clear_memoization(:discussion)
end
+ end
+ def when_saved(note)
todo_service.new_note(note, current_user)
clear_noteable_diffs_cache(note)
Suggestions::CreateService.new(note).execute