From 87543246d9d68066b216811f3de590689e218e7c Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 24 Jan 2022 15:11:33 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../admin/application_settings/payload_previewer.js | 21 +++++++++++++-------- app/controllers/projects/group_links_controller.rb | 2 +- app/graphql/resolvers/merge_requests_resolver.rb | 13 +++++++------ app/graphql/resolvers/paginated_tree_resolver.rb | 8 ++++---- app/graphql/resolvers/tree_resolver.rb | 8 ++++---- app/graphql/resolvers/users/groups_resolver.rb | 6 +++--- app/models/member.rb | 7 +++++++ app/models/members/project_member.rb | 7 +++++++ app/models/state_note.rb | 4 ++-- app/services/issues/close_service.rb | 4 ++-- .../projects/import_export/export_service.rb | 7 +++++-- app/services/system_note_service.rb | 4 ---- .../system_notes/alert_management_service.rb | 19 ++----------------- app/services/system_notes/incident_service.rb | 6 ------ .../admin/application_settings/_usage.html.haml | 4 ++-- app/views/layouts/_page.html.haml | 2 +- 16 files changed, 60 insertions(+), 62 deletions(-) (limited to 'app') diff --git a/app/assets/javascripts/pages/admin/application_settings/payload_previewer.js b/app/assets/javascripts/pages/admin/application_settings/payload_previewer.js index 08f6633f424..c017cf0afa2 100644 --- a/app/assets/javascripts/pages/admin/application_settings/payload_previewer.js +++ b/app/assets/javascripts/pages/admin/application_settings/payload_previewer.js @@ -5,7 +5,6 @@ import { __ } from '../../../locale'; export default class PayloadPreviewer { constructor(trigger) { this.trigger = trigger; - this.container = document.querySelector(trigger.dataset.payloadSelector); this.isVisible = false; this.isInserted = false; } @@ -23,21 +22,27 @@ export default class PayloadPreviewer { }); } + getContainer() { + return document.querySelector(this.trigger.dataset.payloadSelector); + } + requestPayload() { if (this.isInserted) return this.showPayload(); - this.spinner.classList.add('d-inline-flex'); + this.spinner.classList.add('gl-display-inline-flex'); + + const container = this.getContainer(); return axios - .get(this.container.dataset.endpoint, { + .get(container.dataset.endpoint, { responseType: 'text', }) .then(({ data }) => { - this.spinner.classList.remove('d-inline-flex'); + this.spinner.classList.remove('gl-display-inline-flex'); this.insertPayload(data); }) .catch(() => { - this.spinner.classList.remove('d-inline-flex'); + this.spinner.classList.remove('gl-display-inline-flex'); createFlash({ message: __('Error fetching payload data.'), }); @@ -46,19 +51,19 @@ export default class PayloadPreviewer { hidePayload() { this.isVisible = false; - this.container.classList.add('d-none'); + this.getContainer().classList.add('gl-display-none'); this.text.textContent = __('Preview payload'); } showPayload() { this.isVisible = true; - this.container.classList.remove('d-none'); + this.getContainer().classList.remove('gl-display-none'); this.text.textContent = __('Hide payload'); } insertPayload(data) { this.isInserted = true; - this.container.innerHTML = data; + this.getContainer().innerHTML = data; this.showPayload(); } } diff --git a/app/controllers/projects/group_links_controller.rb b/app/controllers/projects/group_links_controller.rb index 27893fe510d..6bc81381d92 100644 --- a/app/controllers/projects/group_links_controller.rb +++ b/app/controllers/projects/group_links_controller.rb @@ -28,7 +28,7 @@ class Projects::GroupLinksController < Projects::ApplicationController if group_link.expires? render json: { - expires_in: helpers.distance_of_time_in_words_to_now(group_link.expires_at), + expires_in: helpers.time_ago_with_tooltip(group_link.expires_at), expires_soon: group_link.expires_soon? } else diff --git a/app/graphql/resolvers/merge_requests_resolver.rb b/app/graphql/resolvers/merge_requests_resolver.rb index 6dbcbe0e04d..ff722122933 100644 --- a/app/graphql/resolvers/merge_requests_resolver.rb +++ b/app/graphql/resolvers/merge_requests_resolver.rb @@ -55,6 +55,13 @@ module Resolvers required: false, description: 'Limit result to draft merge requests.' + argument :created_after, Types::TimeType, + required: false, + description: 'Merge requests created after this timestamp.' + argument :created_before, Types::TimeType, + required: false, + description: 'Merge requests created before this timestamp.' + argument :labels, [GraphQL::Types::String], required: false, as: :label_name, @@ -72,12 +79,6 @@ module Resolvers description: 'Sort merge requests by this criteria.', required: false, default_value: :created_desc - argument :created_after, Types::TimeType, - required: false, - description: 'Merge requests created after this timestamp.' - argument :created_before, Types::TimeType, - required: false, - description: 'Merge requests created before this timestamp.' negated do argument :labels, [GraphQL::Types::String], diff --git a/app/graphql/resolvers/paginated_tree_resolver.rb b/app/graphql/resolvers/paginated_tree_resolver.rb index 6c0545d26de..d29d87ca204 100644 --- a/app/graphql/resolvers/paginated_tree_resolver.rb +++ b/app/graphql/resolvers/paginated_tree_resolver.rb @@ -11,14 +11,14 @@ module Resolvers required: false, default_value: '', # root of the repository description: 'Path to get the tree for. Default value is the root of the repository.' - argument :ref, GraphQL::Types::String, - required: false, - default_value: :head, - description: 'Commit ref to get the tree for. Default value is HEAD.' argument :recursive, GraphQL::Types::Boolean, required: false, default_value: false, description: 'Used to get a recursive tree. Default is false.' + argument :ref, GraphQL::Types::String, + required: false, + default_value: :head, + description: 'Commit ref to get the tree for. Default value is HEAD.' alias_method :repository, :object diff --git a/app/graphql/resolvers/tree_resolver.rb b/app/graphql/resolvers/tree_resolver.rb index 8d6ece0956e..f02eb226810 100644 --- a/app/graphql/resolvers/tree_resolver.rb +++ b/app/graphql/resolvers/tree_resolver.rb @@ -10,14 +10,14 @@ module Resolvers required: false, default_value: '', description: 'Path to get the tree for. Default value is the root of the repository.' - argument :ref, GraphQL::Types::String, - required: false, - default_value: :head, - description: 'Commit ref to get the tree for. Default value is HEAD.' argument :recursive, GraphQL::Types::Boolean, required: false, default_value: false, description: 'Used to get a recursive tree. Default is false.' + argument :ref, GraphQL::Types::String, + required: false, + default_value: :head, + description: 'Commit ref to get the tree for. Default value is HEAD.' alias_method :repository, :object diff --git a/app/graphql/resolvers/users/groups_resolver.rb b/app/graphql/resolvers/users/groups_resolver.rb index d8492a8fcf9..09c6b51cc3d 100644 --- a/app/graphql/resolvers/users/groups_resolver.rb +++ b/app/graphql/resolvers/users/groups_resolver.rb @@ -11,13 +11,13 @@ module Resolvers authorize :read_user_groups authorizes_object! - argument :search, GraphQL::Types::String, - required: false, - description: 'Search by group name or path.' argument :permission_scope, ::Types::PermissionTypes::GroupEnum, required: false, description: 'Filter by permissions the user has on groups.' + argument :search, GraphQL::Types::String, + required: false, + description: 'Search by group name or path.' before_connection_authorization do |nodes, current_user| Preloaders::GroupPolicyPreloader.new(nodes, current_user).execute diff --git a/app/models/member.rb b/app/models/member.rb index 6c0503dca3f..1c1b603b4c7 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -180,6 +180,7 @@ class Member < ApplicationRecord scope :on_project_and_ancestors, ->(project) { where(source: [project] + project.ancestors) } + before_validation :set_member_namespace_id, on: :create before_validation :generate_invite_token, on: :create, if: -> (member) { member.invite_email.present? && !member.invite_accepted_at? } after_create :send_invite, if: :invite?, unless: :importing? @@ -380,6 +381,12 @@ class Member < ApplicationRecord private + # TODO: https://gitlab.com/groups/gitlab-org/-/epics/7054 + # temporary until we can we properly remove the source columns + def set_member_namespace_id + self.member_namespace_id = self.source_id + end + def access_level_inclusion return if access_level.in?(Gitlab::Access.all_values) diff --git a/app/models/members/project_member.rb b/app/models/members/project_member.rb index 6fc665cb87a..3a449055bc1 100644 --- a/app/models/members/project_member.rb +++ b/app/models/members/project_member.rb @@ -118,6 +118,13 @@ class ProjectMember < Member # rubocop:enable CodeReuse/ServiceClass end + # TODO: https://gitlab.com/groups/gitlab-org/-/epics/7054 + # temporary until we can we properly remove the source columns + override :set_member_namespace_id + def set_member_namespace_id + self.member_namespace_id = project&.project_namespace_id + end + def send_invite run_after_commit_or_now { notification_service.invite_project_member(self, @raw_invite_token) } diff --git a/app/models/state_note.rb b/app/models/state_note.rb index 5e35f15aac4..93c025a9bf0 100644 --- a/app/models/state_note.rb +++ b/app/models/state_note.rb @@ -18,11 +18,11 @@ class StateNote < SyntheticNote def note_text(html: false) if event.state == 'closed' if event.close_after_error_tracking_resolve - return 'resolved the corresponding error and closed the issue.' + return 'resolved the corresponding error and closed the issue' end if event.close_auto_resolve_prometheus_alert - return 'automatically closed this issue because the alert resolved.' + return 'automatically closed this incident because the alert resolved' end end diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb index 65f143d0b21..ff45091c7e6 100644 --- a/app/services/issues/close_service.rb +++ b/app/services/issues/close_service.rb @@ -81,7 +81,7 @@ module Issues return if alert.resolved? if alert.resolve - SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project, author: current_user).closed_alert_issue(issue) + SystemNoteService.change_alert_status(alert, current_user, " by closing incident #{issue.to_reference(project)}") else Gitlab::AppLogger.warn( message: 'Cannot resolve an associated Alert Management alert', @@ -97,7 +97,7 @@ module Issues status = issue.incident_management_issuable_escalation_status || issue.build_incident_management_issuable_escalation_status - SystemNoteService.resolve_incident_status(issue, current_user) if status.resolve + SystemNoteService.change_incident_status(issue, current_user, ' by closing the incident') if status.resolve end def store_first_mentioned_in_commit_at(issue, merge_request, max_commit_lookup: 100) diff --git a/app/services/projects/import_export/export_service.rb b/app/services/projects/import_export/export_service.rb index b1a2182fbdc..b91b7f34d42 100644 --- a/app/services/projects/import_export/export_service.rb +++ b/app/services/projects/import_export/export_service.rb @@ -47,8 +47,7 @@ module Projects end def save_all! - if save_exporters - Gitlab::ImportExport::Saver.save(exportable: project, shared: shared) + if save_exporters && save_export_archive notify_success else notify_error! @@ -59,6 +58,10 @@ module Projects exporters.all?(&:save) end + def save_export_archive + Gitlab::ImportExport::Saver.save(exportable: project, shared: shared) + end + def exporters [ version_saver, avatar_saver, project_tree_saver, uploads_saver, diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index 1c85955ce90..7a7aea3fa4c 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -335,10 +335,6 @@ module SystemNoteService ::SystemNotes::IncidentService.new(noteable: incident, project: incident.project, author: author).change_incident_severity end - def resolve_incident_status(incident, author) - ::SystemNotes::IncidentService.new(noteable: incident, project: incident.project, author: author).resolve_incident_status - end - def change_incident_status(incident, author, reason = nil) ::SystemNotes::IncidentService.new(noteable: incident, project: incident.project, author: author).change_incident_status(reason) end diff --git a/app/services/system_notes/alert_management_service.rb b/app/services/system_notes/alert_management_service.rb index 5e20b4be9a5..994e3174668 100644 --- a/app/services/system_notes/alert_management_service.rb +++ b/app/services/system_notes/alert_management_service.rb @@ -40,30 +40,15 @@ module SystemNotes # # Example Note text: # - # "created issue #17 for this alert" + # "created incident #17 for this alert" # # Returns the created Note object def new_alert_issue(issue) - body = "created issue #{issue.to_reference(project)} for this alert" + body = "created incident #{issue.to_reference(project)} for this alert" create_note(NoteSummary.new(noteable, project, author, body, action: 'alert_issue_added')) end - # Called when an AlertManagement::Alert is resolved due to the associated issue being closed - # - # issue - Issue object. - # - # Example Note text: - # - # "changed the status to Resolved by closing issue #17" - # - # Returns the created Note object - def closed_alert_issue(issue) - body = "changed the status to **Resolved** by closing issue #{issue.to_reference(project)}" - - create_note(NoteSummary.new(noteable, project, author, body, action: 'status')) - end - # Called when an alert is resolved due to received resolving alert payload # # alert - AlertManagement::Alert object. diff --git a/app/services/system_notes/incident_service.rb b/app/services/system_notes/incident_service.rb index 6d1c10964b3..f3f9dfbec96 100644 --- a/app/services/system_notes/incident_service.rb +++ b/app/services/system_notes/incident_service.rb @@ -26,12 +26,6 @@ module SystemNotes end end - def resolve_incident_status - body = 'changed the status to **Resolved** by closing the incident' - - create_note(NoteSummary.new(noteable, project, author, body, action: 'status')) - end - # Called when the status of an IncidentManagement::IssuableEscalationStatus has changed # # reason - String. diff --git a/app/views/admin/application_settings/_usage.html.haml b/app/views/admin/application_settings/_usage.html.haml index 4fba1aee12d..326aae26d5e 100644 --- a/app/views/admin/application_settings/_usage.html.haml +++ b/app/views/admin/application_settings/_usage.html.haml @@ -28,8 +28,8 @@ %button.gl-button.btn.btn-default.js-payload-preview-trigger{ type: 'button', data: { payload_selector: ".#{payload_class}" } } .gl-spinner.js-spinner.gl-display-none.gl-mr-2 - .js-text.d-inline= _('Preview payload') - %pre.service-data-payload-container.js-syntax-highlight.code.highlight.mt-2.d-none{ class: payload_class, data: { endpoint: usage_data_admin_application_settings_path(format: :html) } } + .js-text.gl-display-inline= _('Preview payload') + %pre.service-data-payload-container.js-syntax-highlight.code.highlight.gl-mt-2.gl-display-none{ class: payload_class, data: { endpoint: usage_data_admin_application_settings_path(format: :html) } } - else = _('Service ping is disabled in your configuration file, and cannot be enabled through this form.') - deactivating_service_ping_path = help_page_path('development/service_ping/index.md', anchor: 'disable-service-ping-using-the-configuration-file') diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml index 3e875a0eb24..d6557772241 100644 --- a/app/views/layouts/_page.html.haml +++ b/app/views/layouts/_page.html.haml @@ -4,7 +4,6 @@ .content-wrapper.content-wrapper-margin{ class: "#{@content_wrapper_class}" } .mobile-overlay = render_if_exists 'layouts/header/verification_reminder' - = yield :group_invite_members_banner .alert-wrapper.gl-force-block-formatting-context = render 'shared/outdated_browser' = render_if_exists "layouts/header/licensed_user_count_threshold" @@ -21,6 +20,7 @@ = render_if_exists "shared/namespace_user_cap_reached_alert" = render_if_exists "shared/new_user_signups_cap_reached_alert" = yield :page_level_alert + = yield :group_invite_members_banner - unless @hide_breadcrumbs = render "layouts/nav/breadcrumbs" %div{ class: "#{(container_class unless @no_container)} #{@content_class}" } -- cgit v1.2.3