diff options
author | Mayra Cabrera <mcabrera@gitlab.com> | 2019-06-21 00:10:49 +0000 |
---|---|---|
committer | GitLab Release Tools Bot <delivery-team+release-tools@gitlab.com> | 2019-06-25 16:24:44 +0000 |
commit | 119c8d648e6a622dc05ccfa0cebe4cf093092937 (patch) | |
tree | 036e896698854ce00b422427a2881ada41335fc1 | |
parent | 46c74227b6eb4646560944d7711fa071b9150f22 (diff) | |
download | gitlab-ce-119c8d648e6a622dc05ccfa0cebe4cf093092937.tar.gz |
Merge branch 'sh-omit-issues-links-on-poll' into 'master'
Omit issues links in merge request entity API response
Closes #63546
See merge request gitlab-org/gitlab-ce!29917
(cherry picked from commit f47e4d025247509ab73e16c3db248b0f9ccb662c)
1b7ab11f Omit issues links in merge request entity API response
-rw-r--r-- | app/helpers/issuables_helper.rb | 4 | ||||
-rw-r--r-- | app/serializers/merge_request_widget_entity.rb | 5 | ||||
-rw-r--r-- | app/views/projects/merge_requests/show.html.haml | 2 | ||||
-rw-r--r-- | changelogs/unreleased/sh-omit-issues-links-on-poll.yml | 5 | ||||
-rw-r--r-- | spec/serializers/merge_request_widget_entity_spec.rb | 13 |
5 files changed, 25 insertions, 4 deletions
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb index 9a12db258d5..150f24a5d5b 100644 --- a/app/helpers/issuables_helper.rb +++ b/app/helpers/issuables_helper.rb @@ -74,7 +74,7 @@ module IssuablesHelper end end - def serialize_issuable(issuable, serializer: nil) + def serialize_issuable(issuable, opts = {}) serializer_klass = case issuable when Issue IssueSerializer @@ -84,7 +84,7 @@ module IssuablesHelper serializer_klass .new(current_user: current_user, project: issuable.project) - .represent(issuable, serializer: serializer) + .represent(issuable, opts) .to_json end diff --git a/app/serializers/merge_request_widget_entity.rb b/app/serializers/merge_request_widget_entity.rb index a428930dbbf..43aced598a9 100644 --- a/app/serializers/merge_request_widget_entity.rb +++ b/app/serializers/merge_request_widget_entity.rb @@ -114,7 +114,10 @@ class MergeRequestWidgetEntity < IssuableEntity presenter(merge_request).ci_status end - expose :issues_links do + # Rendering and redacting Markdown can be expensive. These links are + # just nice to have in the merge request widget, so only + # include them if they are explicitly requested on first load. + expose :issues_links, if: -> (_, opts) { opts[:issues_links] } do expose :assign_to_closing do |merge_request| presenter(merge_request).assign_to_closing_issues_link end diff --git a/app/views/projects/merge_requests/show.html.haml b/app/views/projects/merge_requests/show.html.haml index f593f4e049e..2084ca6f905 100644 --- a/app/views/projects/merge_requests/show.html.haml +++ b/app/views/projects/merge_requests/show.html.haml @@ -19,7 +19,7 @@ -# haml-lint:disable InlineJavaScript :javascript window.gl = window.gl || {}; - window.gl.mrWidgetData = #{serialize_issuable(@merge_request, serializer: 'widget')} + window.gl.mrWidgetData = #{serialize_issuable(@merge_request, serializer: 'widget', issues_links: true)} window.gl.mrWidgetData.squash_before_merge_help_path = '#{help_page_path("user/project/merge_requests/squash_and_merge")}'; window.gl.mrWidgetData.troubleshooting_docs_path = '#{help_page_path('user/project/merge_requests/index.md', anchor: 'troubleshooting')}'; diff --git a/changelogs/unreleased/sh-omit-issues-links-on-poll.yml b/changelogs/unreleased/sh-omit-issues-links-on-poll.yml new file mode 100644 index 00000000000..21e51d3534f --- /dev/null +++ b/changelogs/unreleased/sh-omit-issues-links-on-poll.yml @@ -0,0 +1,5 @@ +--- +title: Omit issues links in merge request entity API response +merge_request: 29917 +author: +type: performance diff --git a/spec/serializers/merge_request_widget_entity_spec.rb b/spec/serializers/merge_request_widget_entity_spec.rb index a27c22191f4..ffbfac9b326 100644 --- a/spec/serializers/merge_request_widget_entity_spec.rb +++ b/spec/serializers/merge_request_widget_entity_spec.rb @@ -32,6 +32,19 @@ describe MergeRequestWidgetEntity do end end + describe 'issues links' do + it 'includes issues links when requested' do + data = described_class.new(resource, request: request, issues_links: true).as_json + + expect(data).to include(:issues_links) + expect(data[:issues_links]).to include(:assign_to_closing, :closing, :mentioned_but_not_closing) + end + + it 'omits issue links by default' do + expect(subject).not_to include(:issues_links) + end + end + describe 'pipeline' do let(:pipeline) { create(:ci_empty_pipeline, project: project, ref: resource.source_branch, sha: resource.source_branch_sha, head_pipeline_of: resource) } |