MergeRequest#create_merge_request_diff is calling Gitaly n+1 times per invocation
`MergeRequest#create_merge_request_diff` is calling Gitaly `n+1` times per invocation. This code needs to be refactored to fetch all required information in a single Gitaly call. See https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/13996/diffs#ef51b30fcc35462117070f3fe498d3949c279cb9_420_418 ## Known Problem Methods * `app/models/merge_request.rb#create_merge_request_diff` -> `app/models/merge_request_diff.rb#keep_around_commits` -> `Gitlab::Git::Commit#find` ## Failing Tests ```shell rspec './spec/features/merge_requests/user_uses_slash_commands_spec.rb[1:1:2:4:1:1]' rspec ./spec/features/merge_requests/user_uses_slash_commands_spec.rb:141 rspec ./spec/features/projects/merge_requests/user_edits_merge_request_spec.rb:15 ``` ## Stacks ```text lib/gitlab/gitaly_client.rb:143:in `migrate' lib/gitlab/git/repository.rb:1110:in `gitaly_migrate' lib/gitlab/git/commit.rb:63:in `find' app/models/repository.rb:108:in `commit' app/models/repository.rb:231:in `keep_around' app/models/merge_request_diff.rb:331:in `block in keep_around_commits' app/models/merge_request_diff.rb:330:in `each' app/models/merge_request_diff.rb:330:in `keep_around_commits' app/models/merge_request_diff.rb:54:in `save_git_content' app/models/merge_request.rb:426:in `block in create_merge_request_diff' lib/gitlab/gitaly_client.rb:195:in `allow_n_plus_1_calls' app/models/merge_request.rb:425:in `create_merge_request_diff' app/models/merge_request.rb:472:in `reload_diff' app/services/merge_requests/reopen_service.rb:11:in `execute' app/services/issuable_base_service.rb:278:in `change_state' app/services/issuable_base_service.rb:213:in `update' app/services/merge_requests/update_service.rb:21:in `execute' app/services/notes/quick_actions_service.rb:33:in `execute' app/services/notes/create_service.rb:39:in `execute' app/controllers/concerns/notes_actions.rb:38:in `create' app/controllers/projects/notes_controller.rb:19:in `create' ```
issue