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
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-01-24 18:11:33 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-01-24 18:11:33 +0300
commit87543246d9d68066b216811f3de590689e218e7c (patch)
tree72d72aea138b81fe5ccb3b575866906e2da9bcf8 /app
parent4d3bbc4990ead10831a087cece3ccdd25dc4f0b4 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/pages/admin/application_settings/payload_previewer.js21
-rw-r--r--app/controllers/projects/group_links_controller.rb2
-rw-r--r--app/graphql/resolvers/merge_requests_resolver.rb13
-rw-r--r--app/graphql/resolvers/paginated_tree_resolver.rb8
-rw-r--r--app/graphql/resolvers/tree_resolver.rb8
-rw-r--r--app/graphql/resolvers/users/groups_resolver.rb6
-rw-r--r--app/models/member.rb7
-rw-r--r--app/models/members/project_member.rb7
-rw-r--r--app/models/state_note.rb4
-rw-r--r--app/services/issues/close_service.rb4
-rw-r--r--app/services/projects/import_export/export_service.rb7
-rw-r--r--app/services/system_note_service.rb4
-rw-r--r--app/services/system_notes/alert_management_service.rb19
-rw-r--r--app/services/system_notes/incident_service.rb6
-rw-r--r--app/views/admin/application_settings/_usage.html.haml4
-rw-r--r--app/views/layouts/_page.html.haml2
16 files changed, 60 insertions, 62 deletions
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}" }