Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
d23f0cff3c
commit
6f3d5ab313
2
Gemfile
2
Gemfile
|
|
@ -203,7 +203,7 @@ gem 'seed-fu', '~> 2.3.7' # rubocop:todo Gemfile/MissingFeatureCategory
|
|||
gem 'elasticsearch-model', '~> 7.2' # rubocop:todo Gemfile/MissingFeatureCategory
|
||||
gem 'elasticsearch-rails', '~> 7.2', require: 'elasticsearch/rails/instrumentation' # rubocop:todo Gemfile/MissingFeatureCategory
|
||||
gem 'elasticsearch-api', '7.13.3' # rubocop:todo Gemfile/MissingFeatureCategory
|
||||
gem 'aws-sdk-core', '~> 3.194.1' # rubocop:todo Gemfile/MissingFeatureCategory
|
||||
gem 'aws-sdk-core', '~> 3.194.2' # rubocop:todo Gemfile/MissingFeatureCategory
|
||||
gem 'aws-sdk-cloudformation', '~> 1' # rubocop:todo Gemfile/MissingFeatureCategory
|
||||
gem 'aws-sdk-s3', '~> 1.149.1' # rubocop:todo Gemfile/MissingFeatureCategory
|
||||
gem 'faraday_middleware-aws-sigv4', '~>0.3.0' # rubocop:todo Gemfile/MissingFeatureCategory
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
{"name":"aws-eventstream","version":"1.3.0","platform":"ruby","checksum":"f1434cc03ab2248756eb02cfa45e900e59a061d7fbdc4a9fd82a5dd23d796d3f"},
|
||||
{"name":"aws-partitions","version":"1.877.0","platform":"ruby","checksum":"9552ed7bbd3700ed1eeb0121c160ceaf64fa5dbaff5a1ff5fe6fd8481ecd9cfd"},
|
||||
{"name":"aws-sdk-cloudformation","version":"1.41.0","platform":"ruby","checksum":"31e47539719734413671edf9b1a31f8673fbf9688549f50c41affabbcb1c6b26"},
|
||||
{"name":"aws-sdk-core","version":"3.194.1","platform":"ruby","checksum":"3ac7a3d6b872ae69ded6ee0394e3b64645dde1f7c78e123b7dd84700d392607a"},
|
||||
{"name":"aws-sdk-core","version":"3.194.2","platform":"ruby","checksum":"f925fb739cd093e5834910aed85aba5ac8d1b210f26c2cf51f0daf932cc77567"},
|
||||
{"name":"aws-sdk-kms","version":"1.76.0","platform":"ruby","checksum":"e7f75013cba9ba357144f66bbc600631c192e2cda9dd572794be239654e2cf49"},
|
||||
{"name":"aws-sdk-s3","version":"1.149.1","platform":"ruby","checksum":"664e608190d42b486dc79b5dc65e7c2240923902a9833063327a9d831226a46a"},
|
||||
{"name":"aws-sigv4","version":"1.8.0","platform":"ruby","checksum":"84dd99768b91b93b63d1d8e53ee837cfd06ab402812772a7899a78f9f9117cbc"},
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ GEM
|
|||
aws-sdk-cloudformation (1.41.0)
|
||||
aws-sdk-core (~> 3, >= 3.99.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-core (3.194.1)
|
||||
aws-sdk-core (3.194.2)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.8)
|
||||
|
|
@ -1921,7 +1921,7 @@ DEPENDENCIES
|
|||
attr_encrypted (~> 3.2.4)!
|
||||
awesome_print
|
||||
aws-sdk-cloudformation (~> 1)
|
||||
aws-sdk-core (~> 3.194.1)
|
||||
aws-sdk-core (~> 3.194.2)
|
||||
aws-sdk-s3 (~> 1.149.1)
|
||||
axe-core-rspec (~> 4.9.0)
|
||||
babosa (~> 2.0)
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 18 KiB |
|
|
@ -140,7 +140,7 @@ export default {
|
|||
<template #source>
|
||||
<gl-link
|
||||
:href="pipeline.merge_request.source_branch_path"
|
||||
class="link-commit ref-name gl-mt-1"
|
||||
class="link-commit ref-name gl-break-all gl-mt-1"
|
||||
data-testid="source-branch-link"
|
||||
>{{ pipeline.merge_request.source_branch }}</gl-link
|
||||
><clipboard-button
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
fragment DesignItem on Design {
|
||||
...DesignListItem
|
||||
fullPath
|
||||
imported
|
||||
diffRefs {
|
||||
...DesignDiffRefs
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ export function initIssuableApp(store) {
|
|||
issuableId,
|
||||
issueType,
|
||||
hasIterationsFeature,
|
||||
imported,
|
||||
// for issue
|
||||
registerPath,
|
||||
signInPath,
|
||||
|
|
@ -129,6 +130,7 @@ export function initIssuableApp(store) {
|
|||
descriptionComponent: issueType === TYPE_INCIDENT ? IncidentTabs : DescriptionComponent,
|
||||
isConfidential: this.getNoteableData?.confidential,
|
||||
isLocked: this.getNoteableData?.discussion_locked,
|
||||
isImported: imported,
|
||||
issuableStatus: this.getNoteableData?.state,
|
||||
issuableType: issueType,
|
||||
issueId: this.getNoteableData?.id?.toString(),
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@ export default {
|
|||
</template>
|
||||
|
||||
<template v-if="isImported">
|
||||
<span>·</span>
|
||||
<span v-if="isSystemNote">·</span>
|
||||
<imported-badge :text-only="isSystemNote" :importable-type="importableType" size="sm" />
|
||||
</template>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
.todos-list > .todo {
|
||||
// workaround because we cannot use border-collapse
|
||||
padding: 6px 12px !important;
|
||||
border-top: 1px solid transparent;
|
||||
margin-top: -1px;
|
||||
|
||||
span:not(.todo-label),
|
||||
button,
|
||||
|
|
|
|||
|
|
@ -30,17 +30,11 @@ module SendFileUpload
|
|||
headers.store(*Gitlab::Workhorse.send_url(file_upload.url(**redirect_params)))
|
||||
head :ok
|
||||
else
|
||||
redirect_to cdn_fronted_url(file_upload, redirect_params)
|
||||
end
|
||||
end
|
||||
|
||||
def cdn_fronted_url(file, redirect_params)
|
||||
if file.respond_to?(:cdn_enabled_url)
|
||||
result = file.cdn_enabled_url(request.remote_ip, redirect_params[:query])
|
||||
Gitlab::ApplicationContext.push(artifact_used_cdn: result.used_cdn)
|
||||
result.url
|
||||
else
|
||||
file.url(**redirect_params)
|
||||
file_url = ObjectStorage::CDN::FileUrl.new(
|
||||
file: file_upload,
|
||||
ip_address: request.remote_ip,
|
||||
redirect_params: redirect_params)
|
||||
redirect_to file_url.url
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ module Mutations
|
|||
class Create < BaseMutation
|
||||
graphql_name 'IntegrationExclusionCreate'
|
||||
include ResolvesIds
|
||||
MAX_PROJECT_IDS = 100
|
||||
|
||||
field :exclusions, [::Types::Integrations::ExclusionType],
|
||||
null: true,
|
||||
|
|
@ -19,14 +20,18 @@ module Mutations
|
|||
argument :project_ids,
|
||||
[::Types::GlobalIDType[::Project]],
|
||||
required: true,
|
||||
description: 'Ids of projects to exclude.'
|
||||
description: "IDs of projects to exclude up to a maximum of #{MAX_PROJECT_IDS}."
|
||||
|
||||
authorize :admin_all_resources
|
||||
|
||||
def resolve(integration_name:, project_ids:)
|
||||
authorize!(:global)
|
||||
|
||||
projects = Project.id_in(resolve_ids(project_ids))
|
||||
if project_ids.length > MAX_PROJECT_IDS
|
||||
raise Gitlab::Graphql::Errors::ArgumentError, "Count of projectIds should be less than #{MAX_PROJECT_IDS}"
|
||||
end
|
||||
|
||||
projects = Project.id_in(resolve_ids(project_ids)).limit(MAX_PROJECT_IDS)
|
||||
|
||||
result = ::Integrations::Exclusions::CreateService.new(
|
||||
current_user: current_user,
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ module Mutations
|
|||
argument :project_ids,
|
||||
[::Types::GlobalIDType[::Project]],
|
||||
required: true,
|
||||
description: 'Id of excluded project.'
|
||||
description: 'IDs of excluded projects.'
|
||||
|
||||
authorize :admin_all_resources
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ query GetSnippetQuery($ids: [SnippetID!]) {
|
|||
httpUrlToRepo
|
||||
sshUrlToRepo
|
||||
hidden
|
||||
imported
|
||||
blobs {
|
||||
__typename
|
||||
hasUnretrievableBlobs
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ module ResolvesMergeRequests
|
|||
args[:include_subgroups] = true
|
||||
end
|
||||
|
||||
rewrite_param_name(args, :reviewer_wildcard_id, :reviewer_id)
|
||||
|
||||
mr_finder = MergeRequestsFinder.new(current_user, args.compact)
|
||||
finder = Gitlab::Graphql::Loaders::IssuableLoader.new(mr_parent, mr_finder)
|
||||
|
||||
|
|
@ -42,6 +44,10 @@ module ResolvesMergeRequests
|
|||
[:target_project, :author]
|
||||
end
|
||||
|
||||
def rewrite_param_name(params, old_name, new_name)
|
||||
params[new_name] = params.delete(old_name) if params && params[old_name].present?
|
||||
end
|
||||
|
||||
def preloads
|
||||
{
|
||||
assignees: [:assignees],
|
||||
|
|
|
|||
|
|
@ -20,12 +20,8 @@ module Resolvers
|
|||
|
||||
def resolve_groups(**args)
|
||||
GroupsFinder
|
||||
.new(context[:current_user], finder_params(args))
|
||||
.new(context[:current_user], args)
|
||||
.execute
|
||||
end
|
||||
|
||||
def finder_params(args)
|
||||
args
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ module Resolvers
|
|||
argument :reviewer_username, GraphQL::Types::String,
|
||||
required: false,
|
||||
description: 'Username of the reviewer.'
|
||||
argument :reviewer_wildcard_id, ::Types::ReviewerWildcardIdEnum,
|
||||
required: false,
|
||||
description: 'Filter by reviewer presence. Incompatible with reviewerUsername.'
|
||||
end
|
||||
|
||||
argument :iids, [GraphQL::Types::String],
|
||||
|
|
|
|||
|
|
@ -14,17 +14,8 @@ module Resolvers
|
|||
alias_method :organization, :object
|
||||
|
||||
def resolve_groups(**args)
|
||||
::Organizations::GroupsFinder.new(context[:current_user], finder_params(args)).execute
|
||||
end
|
||||
|
||||
def finder_params(args)
|
||||
extra_args = if Feature.enabled?(:resolve_all_organization_groups, current_user)
|
||||
{ organization: organization }
|
||||
else
|
||||
{ organization: organization, include_ancestors: false, all_available: false }
|
||||
end
|
||||
|
||||
super.merge(extra_args)
|
||||
finder_params = args.merge(organization: organization)
|
||||
::Organizations::GroupsFinder.new(context[:current_user], finder_params).execute
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Types
|
||||
class ReviewerWildcardIdEnum < BaseEnum
|
||||
graphql_name 'ReviewerWildcardId'
|
||||
description 'Reviewer ID wildcard values'
|
||||
|
||||
value 'NONE', 'No reviewer is assigned.'
|
||||
value 'ANY', 'Any reviewer is assigned.'
|
||||
end
|
||||
end
|
||||
|
|
@ -164,6 +164,7 @@ module IssuablesHelper
|
|||
canUpdate: can?(current_user, :"update_#{issuable.to_ability_name}", issuable),
|
||||
canDestroy: can?(current_user, :"destroy_#{issuable.to_ability_name}", issuable),
|
||||
issuableRef: issuable.to_reference,
|
||||
imported: issuable.imported?,
|
||||
markdownPreviewPath: preview_markdown_path(parent, target_type: issuable.model_name, target_id: issuable.iid),
|
||||
markdownDocsPath: help_page_path('user/markdown'),
|
||||
lockVersion: issuable.lock_version,
|
||||
|
|
|
|||
|
|
@ -311,23 +311,24 @@ module MergeRequestsHelper
|
|||
_('%{author} requested to merge %{source_branch} %{copy_button} into %{target_branch} %{created_at}').html_safe % { author: link_to_author.html_safe, source_branch: merge_request_source_branch(merge_request).html_safe, copy_button: copy_button.html_safe, target_branch: target_branch.html_safe, created_at: time_ago_with_tooltip(merge_request.created_at, html_class: 'gl-display-inline-block').html_safe }
|
||||
end
|
||||
|
||||
def sticky_header_data
|
||||
def sticky_header_data(project, merge_request)
|
||||
data = {
|
||||
iid: @merge_request.iid,
|
||||
projectPath: @project.full_path,
|
||||
sourceProjectPath: @merge_request.source_project_path,
|
||||
title: markdown_field(@merge_request, :title),
|
||||
iid: merge_request.iid,
|
||||
projectPath: project.full_path,
|
||||
sourceProjectPath: merge_request.source_project_path,
|
||||
title: markdown_field(merge_request, :title),
|
||||
isFluidLayout: fluid_layout.to_s,
|
||||
blocksMerge: @project.only_allow_merge_if_all_discussions_are_resolved?.to_s,
|
||||
blocksMerge: project.only_allow_merge_if_all_discussions_are_resolved?.to_s,
|
||||
imported: merge_request.imported?.to_s,
|
||||
tabs: [
|
||||
['show', _('Overview'), project_merge_request_path(@project, @merge_request), @merge_request.related_notes.user.count],
|
||||
['commits', _('Commits'), commits_project_merge_request_path(@project, @merge_request), @commits_count],
|
||||
['diffs', _('Changes'), diffs_project_merge_request_path(@project, @merge_request), @diffs_count]
|
||||
['show', _('Overview'), project_merge_request_path(project, merge_request), merge_request.related_notes.user.count],
|
||||
['commits', _('Commits'), commits_project_merge_request_path(project, merge_request), @commits_count],
|
||||
['diffs', _('Changes'), diffs_project_merge_request_path(project, merge_request), @diffs_count]
|
||||
]
|
||||
}
|
||||
|
||||
if @project.builds_enabled?
|
||||
data[:tabs].insert(2, ['pipelines', _('Pipelines'), pipelines_project_merge_request_path(@project, @merge_request), @number_of_pipelines])
|
||||
if project.builds_enabled?
|
||||
data[:tabs].insert(2, ['pipelines', _('Pipelines'), pipelines_project_merge_request_path(project, merge_request), @number_of_pipelines])
|
||||
end
|
||||
|
||||
data
|
||||
|
|
|
|||
|
|
@ -19,7 +19,10 @@ module Integrations
|
|||
|
||||
instance_integration = integration_class.for_instance.first
|
||||
|
||||
return ServiceResponse.success(payload: exclusions.destroy_all) unless instance_integration # rubocop: disable Cop/DestroyAll -- We load exclusions so we can have the deleted exclusions in the response
|
||||
unless instance_integration
|
||||
integration_class.id_in(exclusions.map(&:id)).delete_all
|
||||
return ServiceResponse.success(payload: exclusions)
|
||||
end
|
||||
|
||||
::Integrations::Propagation::BulkUpdateService.new(instance_integration, exclusions).execute
|
||||
ServiceResponse.success(payload: exclusions)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module ObjectStorage
|
||||
module CDN
|
||||
class FileUrl
|
||||
def initialize(file:, ip_address:, redirect_params: {})
|
||||
@file = file
|
||||
@ip_address = ip_address
|
||||
@redirect_params = redirect_params
|
||||
end
|
||||
|
||||
def url
|
||||
if file.respond_to?(:cdn_enabled_url)
|
||||
result = file.cdn_enabled_url(ip_address, redirect_params[:query])
|
||||
Gitlab::ApplicationContext.push(artifact_used_cdn: result.used_cdn)
|
||||
result.url
|
||||
else
|
||||
file.url(**redirect_params)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :file, :ip_address, :redirect_params
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
%li.todo.gl-hover-border-blue-200.gl-hover-bg-blue-50.gl-hover-cursor-pointer.gl-relative{ class: "todo-#{todo.done? ? 'done' : 'pending'}", id: dom_id(todo) }
|
||||
%li.todo.gl-border-t.gl-border-gray-50.gl-hover-border-blue-200.gl-hover-bg-blue-50.gl-hover-cursor-pointer.gl-relative{ class: "hover:gl-z-1 todo-#{todo.done? ? 'done' : 'pending'}", id: dom_id(todo) }
|
||||
.gl-display-flex.gl-flex-direction-column.gl-sm-flex-direction-row.gl-sm-align-items-center
|
||||
.todo-item.gl-overflow-hidden.gl-overflow-x-auto.gl-align-self-center.gl-w-full{ data: { testid: "todo-item-container" } }
|
||||
.todo-title.gl-pt-2.gl-pb-3.gl-px-2.gl-md-mb-1.gl-font-sm.gl-text-secondary
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
.event-item-timestamp.gl-font-sm
|
||||
#{time_ago_with_tooltip(event.created_at)}
|
||||
- if event.imported?
|
||||
%span •
|
||||
= render "import/shared/imported_text", importable: _('event')
|
||||
%span ·
|
||||
= render "import/shared/imported_badge", text_only: true, importable: _('event')
|
||||
|
||||
- if event.wiki_page?
|
||||
= render "events/event/wiki", event: event
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
- tooltip_title = safe_format(s_('BulkImport|This %{importable} was imported from another instance.'), importable: local_assigns[:importable])
|
||||
- text_only = local_assigns.fetch(:text_only, false)
|
||||
|
||||
- if text_only
|
||||
%span.has-tooltip.gl-line-height-normal.gl-font-sm{ title: tooltip_title }= _('Imported')
|
||||
- else
|
||||
= render Pajamas::BadgeComponent.new(_('Imported'), size: :sm, title: tooltip_title, class: 'has-tooltip')
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
- tooltip_title = safe_format(s_('BulkImport|This %{importable} was imported from another instance.'), importable: local_assigns[:importable])
|
||||
|
||||
%span.has-tooltip.gl-line-height-normal.gl-font-sm{ title: tooltip_title }= _('Imported')
|
||||
|
|
@ -1,34 +1,40 @@
|
|||
- @no_container = true
|
||||
- container_class = fluid_layout ? '' : 'container-limited'
|
||||
- add_to_breadcrumbs s_("CompareRevisions|Compare revisions"), project_compare_index_path(@project)
|
||||
- page_title "#{params[:from]} to #{params[:to]}"
|
||||
- has_diff = @commits.present? || @diffs.present? && @diffs.diff_files.present?
|
||||
-# Only show commit list in the first page
|
||||
- hide_commit_list = params[:page].present? && params[:page] != '1'
|
||||
|
||||
.gl-border-b-0.gl-mb-0.gl-pt-4
|
||||
.js-signature-container{ data: { 'signatures-path' => signatures_namespace_project_compare_index_path } }
|
||||
#js-compare-selector{ data: project_compare_selector_data(@project, @merge_request, params) }
|
||||
.container-fluid{ class: [container_class] }
|
||||
.gl-border-b-0.gl-mb-0.gl-pt-4
|
||||
.js-signature-container{ data: { 'signatures-path' => signatures_namespace_project_compare_index_path } }
|
||||
#js-compare-selector{ data: project_compare_selector_data(@project, @merge_request, params) }
|
||||
|
||||
- if has_diff
|
||||
= render "projects/commits/commit_list" unless hide_commit_list
|
||||
= render "projects/diffs/diffs",
|
||||
diffs: @diffs,
|
||||
environment: @environment,
|
||||
diff_page_context: "is-compare",
|
||||
page: pagination_params[:page],
|
||||
paginate_diffs: true,
|
||||
paginate_diffs_per_page: Projects::CompareController::COMMIT_DIFFS_PER_PAGE
|
||||
.container-fluid{ class: [container_class] }
|
||||
= render "projects/commits/commit_list" unless hide_commit_list
|
||||
.container-fluid
|
||||
= render "projects/diffs/diffs",
|
||||
diffs: @diffs,
|
||||
environment: @environment,
|
||||
diff_page_context: "is-compare",
|
||||
page: pagination_params[:page],
|
||||
paginate_diffs: true,
|
||||
paginate_diffs_per_page: Projects::CompareController::COMMIT_DIFFS_PER_PAGE
|
||||
- else
|
||||
= render Pajamas::CardComponent.new(card_options: { class: "gl-bg-gray-10" }) do |c|
|
||||
- c.with_body do
|
||||
= render Pajamas::EmptyStateComponent.new(svg_path: 'illustrations/empty-state/empty-commit-md.svg',
|
||||
title: s_("CompareRevisions|There isn't anything to compare")) do |c|
|
||||
.container-fluid
|
||||
= render Pajamas::CardComponent.new(card_options: { class: "gl-bg-gray-10" }) do |c|
|
||||
- c.with_body do
|
||||
= render Pajamas::EmptyStateComponent.new(svg_path: 'illustrations/empty-state/empty-commit-md.svg',
|
||||
title: s_("CompareRevisions|There isn't anything to compare")) do |c|
|
||||
|
||||
- c.with_description do
|
||||
- if params[:to] == params[:from]
|
||||
- source_branch = capture do
|
||||
%span.ref-name= params[:from]
|
||||
- target_branch = capture do
|
||||
%span.ref-name= params[:to]
|
||||
= (s_("CompareRevisions|%{source_branch} and %{target_branch} are the same.") % { source_branch: source_branch, target_branch: target_branch }).html_safe
|
||||
- else
|
||||
= _("To get a valid comparison, select two different branches.")
|
||||
- c.with_description do
|
||||
- if params[:to] == params[:from]
|
||||
- source_branch = capture do
|
||||
%span.ref-name= params[:from]
|
||||
- target_branch = capture do
|
||||
%span.ref-name= params[:to]
|
||||
= (s_("CompareRevisions|%{source_branch} and %{target_branch} are the same.") % { source_branch: source_branch, target_branch: target_branch }).html_safe
|
||||
- else
|
||||
= _("To get a valid comparison, select two different branches.")
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
.detail-page-description.gl-pt-2.gl-pb-4.gl-display-flex.gl-align-items-baseline.gl-flex-wrap{ class: "#{'is-merge-request' if !fluid_layout}" }
|
||||
.js-mr-header{ data: { project_path: @merge_request.project.path_with_namespace, hidden: @merge_request.hidden?.to_s, iid: @merge_request.iid, state: @merge_request.state } }
|
||||
.js-mr-header{ data: { project_path: @merge_request.project.path_with_namespace, hidden: @merge_request.hidden?.to_s, imported: @merge_request.imported?.to_s, iid: @merge_request.iid, state: @merge_request.state } }
|
||||
= merge_request_header(@project, @merge_request)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
.merge-request{ data: { mr_action: mr_action, url: merge_request_path(@merge_request, format: :json), project_path: project_path(@merge_request.project), lock_version: @merge_request.lock_version, diffs_batch_cache_key: @diffs_batch_cache_key } }
|
||||
= render "projects/merge_requests/mr_title"
|
||||
#js-merge-sticky-header{ data: { data: sticky_header_data.to_json } }
|
||||
#js-merge-sticky-header{ data: { data: sticky_header_data(@project, @merge_request).to_json } }
|
||||
.merge-request-details.issuable-details{ data: { id: @merge_request.project.id } }
|
||||
= render "projects/merge_requests/mr_box"
|
||||
.gl-static.merge-request-tabs-holder{ class: "#{'js-tabs-affix' unless ENV['RAILS_ENV'] == 'test'}" }
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@
|
|||
%span.system-note-separator.gl-display-none.gl-sm-display-inline
|
||||
·
|
||||
%a.system-note-separator{ href: "##{dom_id(note)}" }= time_ago_with_tooltip(note.created_at, placement: 'bottom', html_class: 'note-created-ago')
|
||||
- if note.imported?
|
||||
= render "import/shared/imported_badge", importable: note.system? ? _('activity') : _('comment')
|
||||
- unless note.system?
|
||||
.note-actions
|
||||
- if note.for_personal_snippet?
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
name: resolve_all_organization_groups
|
||||
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/444218
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/146600
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/444981
|
||||
milestone: '16.11'
|
||||
group: group::tenant scale
|
||||
type: gitlab_com_derisk
|
||||
default_enabled: false
|
||||
|
|
@ -148,7 +148,7 @@ License.current.license_id
|
|||
License.current.data
|
||||
|
||||
# Confirm the current billable seat count excluding guest users. This is useful for customers who use an Ultimate subscription tier where Guest seats are not counted.
|
||||
User.active.without_bots.excluding_guests.count
|
||||
User.active.without_bots.excluding_guests_and_requests.count
|
||||
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ LFS objects are also [S3-compatible](lfs/index.md#storing-lfs-objects-in-remote-
|
|||
|
||||
## Configure where new repositories are stored
|
||||
|
||||
After you configure multiple repository storages, you can choose where new repositories are stored:
|
||||
After you [configure multiple repository storages](https://docs.gitlab.com/omnibus/settings/configuration.html#store-git-data-in-an-alternative-directory), you can choose where new repositories are stored:
|
||||
|
||||
1. On the left sidebar, at the bottom, select **Admin Area**.
|
||||
1. Select **Settings > Repository**.
|
||||
|
|
|
|||
|
|
@ -5460,7 +5460,7 @@ Input type: `IntegrationExclusionCreateInput`
|
|||
| ---- | ---- | ----------- |
|
||||
| <a id="mutationintegrationexclusioncreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
|
||||
| <a id="mutationintegrationexclusioncreateintegrationname"></a>`integrationName` | [`IntegrationType!`](#integrationtype) | Type of integration to exclude. |
|
||||
| <a id="mutationintegrationexclusioncreateprojectids"></a>`projectIds` | [`[ProjectID!]!`](#projectid) | Ids of projects to exclude. |
|
||||
| <a id="mutationintegrationexclusioncreateprojectids"></a>`projectIds` | [`[ProjectID!]!`](#projectid) | IDs of projects to exclude up to a maximum of 100. |
|
||||
|
||||
#### Fields
|
||||
|
||||
|
|
@ -5484,7 +5484,7 @@ Input type: `IntegrationExclusionDeleteInput`
|
|||
| ---- | ---- | ----------- |
|
||||
| <a id="mutationintegrationexclusiondeleteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
|
||||
| <a id="mutationintegrationexclusiondeleteintegrationname"></a>`integrationName` | [`IntegrationType!`](#integrationtype) | Type of integration. |
|
||||
| <a id="mutationintegrationexclusiondeleteprojectids"></a>`projectIds` | [`[ProjectID!]!`](#projectid) | Id of excluded project. |
|
||||
| <a id="mutationintegrationexclusiondeleteprojectids"></a>`projectIds` | [`[ProjectID!]!`](#projectid) | IDs of excluded projects. |
|
||||
|
||||
#### Fields
|
||||
|
||||
|
|
@ -15690,6 +15690,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="addonuserassignedmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="addonuserassignedmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="addonuserassignedmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="addonuserassignedmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="addonuserassignedmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="addonuserassignedmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="addonuserassignedmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -15728,6 +15729,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="addonuserauthoredmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="addonuserauthoredmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="addonuserauthoredmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="addonuserauthoredmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="addonuserauthoredmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="addonuserauthoredmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="addonuserauthoredmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -16452,6 +16454,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="autocompleteduserassignedmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="autocompleteduserassignedmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="autocompleteduserassignedmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="autocompleteduserassignedmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="autocompleteduserassignedmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="autocompleteduserassignedmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="autocompleteduserassignedmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -16490,6 +16493,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="autocompleteduserauthoredmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="autocompleteduserauthoredmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="autocompleteduserauthoredmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="autocompleteduserauthoredmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="autocompleteduserauthoredmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="autocompleteduserauthoredmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="autocompleteduserauthoredmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -18624,6 +18628,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="currentuserassignedmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="currentuserassignedmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="currentuserassignedmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="currentuserassignedmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="currentuserassignedmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="currentuserassignedmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="currentuserassignedmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -18662,6 +18667,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="currentuserauthoredmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="currentuserauthoredmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="currentuserauthoredmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="currentuserauthoredmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="currentuserauthoredmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="currentuserauthoredmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="currentuserauthoredmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -23896,6 +23902,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="mergerequestassigneeassignedmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="mergerequestassigneeassignedmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="mergerequestassigneeassignedmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="mergerequestassigneeassignedmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="mergerequestassigneeassignedmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="mergerequestassigneeassignedmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="mergerequestassigneeassignedmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -23934,6 +23941,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="mergerequestassigneeauthoredmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="mergerequestassigneeauthoredmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="mergerequestassigneeauthoredmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="mergerequestassigneeauthoredmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="mergerequestassigneeauthoredmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="mergerequestassigneeauthoredmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="mergerequestassigneeauthoredmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -24206,6 +24214,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="mergerequestauthorassignedmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="mergerequestauthorassignedmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="mergerequestauthorassignedmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="mergerequestauthorassignedmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="mergerequestauthorassignedmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="mergerequestauthorassignedmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="mergerequestauthorassignedmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -24244,6 +24253,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="mergerequestauthorauthoredmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="mergerequestauthorauthoredmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="mergerequestauthorauthoredmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="mergerequestauthorauthoredmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="mergerequestauthorauthoredmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="mergerequestauthorauthoredmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="mergerequestauthorauthoredmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -24563,6 +24573,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="mergerequestparticipantassignedmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="mergerequestparticipantassignedmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="mergerequestparticipantassignedmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="mergerequestparticipantassignedmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="mergerequestparticipantassignedmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="mergerequestparticipantassignedmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="mergerequestparticipantassignedmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -24601,6 +24612,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="mergerequestparticipantauthoredmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="mergerequestparticipantauthoredmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="mergerequestparticipantauthoredmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="mergerequestparticipantauthoredmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="mergerequestparticipantauthoredmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="mergerequestparticipantauthoredmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="mergerequestparticipantauthoredmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -24909,6 +24921,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="mergerequestreviewerassignedmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="mergerequestreviewerassignedmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="mergerequestreviewerassignedmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="mergerequestreviewerassignedmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="mergerequestreviewerassignedmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="mergerequestreviewerassignedmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="mergerequestreviewerassignedmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -24947,6 +24960,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="mergerequestreviewerauthoredmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="mergerequestreviewerauthoredmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="mergerequestreviewerauthoredmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="mergerequestreviewerauthoredmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="mergerequestreviewerauthoredmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="mergerequestreviewerauthoredmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="mergerequestreviewerauthoredmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -27865,6 +27879,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="projectmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="projectmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="projectmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="projectmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="projectmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="projectmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="projectmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -30605,6 +30620,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="usercoreassignedmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="usercoreassignedmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="usercoreassignedmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="usercoreassignedmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="usercoreassignedmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="usercoreassignedmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="usercoreassignedmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -30643,6 +30659,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="usercoreauthoredmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="usercoreauthoredmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="usercoreauthoredmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="usercoreauthoredmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="usercoreauthoredmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="usercoreauthoredmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="usercoreauthoredmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -34448,6 +34465,15 @@ Status of a requirement based on last test report.
|
|||
| <a id="requirementstatusfiltermissing"></a>`MISSING` | Requirements without any test report. |
|
||||
| <a id="requirementstatusfilterpassed"></a>`PASSED` | Passed test report. |
|
||||
|
||||
### `ReviewerWildcardId`
|
||||
|
||||
Reviewer ID wildcard values.
|
||||
|
||||
| Value | Description |
|
||||
| ----- | ----------- |
|
||||
| <a id="reviewerwildcardidany"></a>`ANY` | Any reviewer is assigned. |
|
||||
| <a id="reviewerwildcardidnone"></a>`NONE` | No reviewer is assigned. |
|
||||
|
||||
### `SastUiComponentSize`
|
||||
|
||||
Size of UI component in SAST configuration page.
|
||||
|
|
@ -36805,6 +36831,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="userassignedmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="userassignedmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="userassignedmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="userassignedmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="userassignedmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="userassignedmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="userassignedmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
@ -36843,6 +36870,7 @@ four standard [pagination arguments](#pagination-arguments):
|
|||
| <a id="userauthoredmergerequestsreviewstate"></a>`reviewState` **{warning-solid}** | [`MergeRequestReviewState`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer state of the merge request. |
|
||||
| <a id="userauthoredmergerequestsreviewstates"></a>`reviewStates` **{warning-solid}** | [`[MergeRequestReviewState!]`](#mergerequestreviewstate) | **Introduced** in GitLab 17.0. **Status**: Experiment. Reviewer states of the merge request. |
|
||||
| <a id="userauthoredmergerequestsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
|
||||
| <a id="userauthoredmergerequestsreviewerwildcardid"></a>`reviewerWildcardId` | [`ReviewerWildcardId`](#reviewerwildcardid) | Filter by reviewer presence. Incompatible with reviewerUsername. |
|
||||
| <a id="userauthoredmergerequestssort"></a>`sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this criteria. |
|
||||
| <a id="userauthoredmergerequestssourcebranches"></a>`sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
|
||||
| <a id="userauthoredmergerequestsstate"></a>`state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
|
||||
|
|
|
|||
|
|
@ -303,6 +303,7 @@ To view group import history:
|
|||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/429109) in GitLab 16.6 [with a flag](../../feature_flags.md) named `bulk_import_details_page`. Enabled by default.
|
||||
> - Feature flag `bulk_import_details_page` removed in GitLab 16.8.
|
||||
> - Details for partially completed and completed imports [added](https://gitlab.com/gitlab-org/gitlab/-/issues/437874) in GitLab 16.9.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/443492) in GitLab 17.0, an **Imported** badge to indicate that designs, epics, issues, merge requests, notes (system notes and comments), snippets, and user profile activity were imported.
|
||||
|
||||
To review the results of an import:
|
||||
|
||||
|
|
@ -310,6 +311,8 @@ To review the results of an import:
|
|||
1. To see the details of a failed import, select the **See failures** link on any import with a **Failed** or **Partially completed** status.
|
||||
1. If the import has a **Partially completed** or **Complete** status, to see which items were and were not imported, select **Details**.
|
||||
|
||||
You can also see that an item was imported when you see an **Imported** badge on some items in the GitLab UI.
|
||||
|
||||
## Cancel a running import
|
||||
|
||||
To cancel a running import:
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ variables:
|
|||
RUBY_VERSION: "3.1"
|
||||
|
||||
default:
|
||||
tags:
|
||||
- gitlab-org
|
||||
image: "ruby:${RUBY_VERSION}"
|
||||
cache:
|
||||
key: "$[[inputs.gem_name]]-${RUBY_VERSION}"
|
||||
|
|
|
|||
|
|
@ -695,7 +695,8 @@ module API
|
|||
elsif supports_direct_download && file.class.direct_download_enabled?
|
||||
return redirect(ObjectStorage::S3.signed_head_url(file)) if request.head? && file.fog_credentials[:provider] == 'AWS'
|
||||
|
||||
redirect(cdn_fronted_url(file))
|
||||
file_url = ObjectStorage::CDN::FileUrl.new(file: file, ip_address: ip_address)
|
||||
redirect(file_url.url)
|
||||
else
|
||||
header(*Gitlab::Workhorse.send_url(file.url))
|
||||
status :ok
|
||||
|
|
@ -703,16 +704,6 @@ module API
|
|||
end
|
||||
end
|
||||
|
||||
def cdn_fronted_url(file)
|
||||
if file.respond_to?(:cdn_enabled_url)
|
||||
result = file.cdn_enabled_url(ip_address)
|
||||
Gitlab::ApplicationContext.push(artifact_used_cdn: result.used_cdn)
|
||||
result.url
|
||||
else
|
||||
file.url
|
||||
end
|
||||
end
|
||||
|
||||
def increment_counter(event_name)
|
||||
Gitlab::UsageDataCounters.count(event_name)
|
||||
rescue StandardError => error
|
||||
|
|
|
|||
|
|
@ -23115,9 +23115,6 @@ msgstr ""
|
|||
msgid "Get started"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get started with GitLab"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get started with error tracking"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -30357,9 +30354,6 @@ msgstr ""
|
|||
msgid "LearnGitlab|Contact your administrator to start a free Ultimate trial."
|
||||
msgstr ""
|
||||
|
||||
msgid "LearnGitlab|Ok, let's go"
|
||||
msgstr ""
|
||||
|
||||
msgid "LearnGitlab|View administrator list"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -42398,9 +42392,6 @@ msgstr ""
|
|||
msgid "Read their documentation."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ready to get started with GitLab? Follow these steps to set up your workspace, plan and commit changes, and deploy your project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Ready to merge by members who can write to the target branch."
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ module QA
|
|||
personal_access_token: ENV['GITLAB_QA_ACCESS_TOKEN'])
|
||||
@delete_before = Date.parse(ENV['DELETE_BEFORE'] || (Date.today - 1).to_s)
|
||||
@dry_run = dry_run
|
||||
@permanently_delete = !!(ENV['PERMANENTLY_DELETE'].to_s =~ /true|1|y/i)
|
||||
@type = nil
|
||||
end
|
||||
|
||||
|
|
@ -47,7 +48,7 @@ module QA
|
|||
response = delete(resource_request(resource, permanently_remove: true, full_path: path))
|
||||
wait_for_resource_deletion(resource, true) if success?(response&.code)
|
||||
|
||||
if success?(response&.code) && permanently_deleted?(resource)
|
||||
if permanently_deleted?(resource)
|
||||
log_permanent_deletion(resource)
|
||||
else
|
||||
log_failure(resource, response)
|
||||
|
|
@ -84,7 +85,9 @@ module QA
|
|||
|
||||
return log_failure(resource, response) unless mark_for_deletion_possible?(resource)
|
||||
|
||||
ENV['PERMANENTLY_DELETE'] ? delete_permanently(resource) : log_marked_for_deletion(resource)
|
||||
@permanently_delete ? delete_permanently(resource) : log_marked_for_deletion(resource)
|
||||
elsif response&.code == 404
|
||||
log_permanent_deletion(resource)
|
||||
else
|
||||
log_failure(resource, response)
|
||||
end
|
||||
|
|
@ -183,7 +186,7 @@ module QA
|
|||
# @return [Array<String, Hash>] results
|
||||
def log_failure(resource, response)
|
||||
path = resource_path(resource)
|
||||
logger.error("\e[31mFAILED\e[0m to delete #{@type} #{path} with #{response.code}. Resource still exists.\n")
|
||||
logger.error("\e[31mFAILED\e[0m to delete #{@type} #{path} with #{response.code}.\n")
|
||||
["failed_deletions", { path: path, response: response }]
|
||||
end
|
||||
|
||||
|
|
@ -228,6 +231,8 @@ module QA
|
|||
print_failed_deletion_attempts(failed_deletions)
|
||||
|
||||
logger.info('Done')
|
||||
|
||||
exit 1 unless failed_deletions.blank?
|
||||
end
|
||||
|
||||
# Check if a resource can be marked for deletion
|
||||
|
|
@ -301,7 +306,11 @@ module QA
|
|||
wait_until(max_duration: 60, sleep_interval: 1, raise_on_failure: false) do
|
||||
response = get(resource_request(resource))
|
||||
|
||||
permanent ? response.code == 404 : response.code == 404 || marked_for_deletion?(parse_body(response))
|
||||
if permanent
|
||||
response&.code == 404
|
||||
else
|
||||
response&.code == 404 || (success?(response&.code) && marked_for_deletion?(parse_body(response)))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -33,6 +33,10 @@ RSpec.describe SendFileUpload, feature_category: :user_profile do
|
|||
end
|
||||
|
||||
def current_user; end
|
||||
|
||||
def request
|
||||
ActionDispatch::Request.new({})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ exports[`Design management design index page when loaded renders design index 1`
|
|||
iid="1"
|
||||
image="test.jpg"
|
||||
imagev432x230="test.jpg"
|
||||
imported="true"
|
||||
islatestversion="true"
|
||||
issidebaropen="true"
|
||||
issue="[object Object]"
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ export const createGQLSnippet = () => ({
|
|||
},
|
||||
},
|
||||
hidden: false,
|
||||
imported: false,
|
||||
});
|
||||
|
||||
export const createGQLSnippetsQueryResponse = (snippets) => ({
|
||||
|
|
|
|||
|
|
@ -22,6 +22,16 @@ RSpec.describe Resolvers::ProjectMergeRequestsResolver do
|
|||
)
|
||||
end
|
||||
|
||||
let_it_be(:merge_request2) do
|
||||
create(
|
||||
:merge_request,
|
||||
:unique_branches,
|
||||
source_project: project,
|
||||
target_project: project,
|
||||
author: other_user
|
||||
)
|
||||
end
|
||||
|
||||
context 'by assignee' do
|
||||
it 'filters merge requests by assignee username' do
|
||||
result = resolve_mr(project, assignee_username: other_user.username)
|
||||
|
|
@ -40,7 +50,7 @@ RSpec.describe Resolvers::ProjectMergeRequestsResolver do
|
|||
it 'filters merge requests by author username' do
|
||||
result = resolve_mr(project, author_username: other_user.username)
|
||||
|
||||
expect(result).to contain_exactly(merge_request)
|
||||
expect(result).to contain_exactly(merge_request, merge_request2)
|
||||
end
|
||||
|
||||
it 'does not find anything' do
|
||||
|
|
@ -64,6 +74,20 @@ RSpec.describe Resolvers::ProjectMergeRequestsResolver do
|
|||
end
|
||||
end
|
||||
|
||||
context 'with reviewer wildcard param' do
|
||||
it 'filters merge requests by NONE wildcard' do
|
||||
result = resolve_mr(project, reviewer_wildcard_id: 'NONE')
|
||||
|
||||
expect(result).to contain_exactly(merge_request2)
|
||||
end
|
||||
|
||||
it 'filters merge requests by ANY wildcard' do
|
||||
result = resolve_mr(project, reviewer_wildcard_id: 'ANY')
|
||||
|
||||
expect(result).to contain_exactly(merge_request)
|
||||
end
|
||||
end
|
||||
|
||||
def resolve_mr(project, resolver: described_class, user: current_user, **args)
|
||||
resolve(resolver, obj: project, args: args, ctx: { current_user: user })
|
||||
end
|
||||
|
|
|
|||
|
|
@ -354,6 +354,7 @@ RSpec.describe GitlabSchema.types['Project'], feature_category: :groups_and_proj
|
|||
:author_username,
|
||||
:assignee_username,
|
||||
:reviewer_username,
|
||||
:reviewer_wildcard_id,
|
||||
:review_state,
|
||||
:review_states,
|
||||
:milestone_title,
|
||||
|
|
|
|||
|
|
@ -252,6 +252,7 @@ RSpec.describe IssuablesHelper, feature_category: :team_planning do
|
|||
canUpdate: true,
|
||||
canDestroy: true,
|
||||
issuableRef: "##{issue.iid}",
|
||||
imported: issue.imported?,
|
||||
markdownPreviewPath: "/#{@project.full_path}/preview_markdown?target_id=#{issue.iid}&target_type=Issue",
|
||||
markdownDocsPath: '/help/user/markdown',
|
||||
lockVersion: issue.lock_version,
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ RSpec.describe MergeRequestsHelper, feature_category: :code_review_workflow do
|
|||
include ProjectForksHelper
|
||||
include IconsHelper
|
||||
include IssuablesHelper
|
||||
include MarkupHelper
|
||||
|
||||
let_it_be(:current_user) { create(:user) }
|
||||
|
||||
|
|
@ -218,6 +219,31 @@ RSpec.describe MergeRequestsHelper, feature_category: :code_review_workflow do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#sticky_header_data' do
|
||||
let_it_be(:project) { create(:project) }
|
||||
let(:merge_request) do
|
||||
create(:merge_request, source_project: project, target_project: project, imported_from: imported_from)
|
||||
end
|
||||
|
||||
subject { sticky_header_data(project, merge_request) }
|
||||
|
||||
context 'when the merge request is not imported' do
|
||||
let(:imported_from) { :none }
|
||||
|
||||
it 'returns data with imported set as false' do
|
||||
expect(subject[:imported]).to eq('false')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the merge request is imported' do
|
||||
let(:imported_from) { :gitlab_migration }
|
||||
|
||||
it 'returns data with imported set as true' do
|
||||
expect(subject[:imported]).to eq('true')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#tab_count_display' do
|
||||
let(:merge_request) { create(:merge_request) }
|
||||
|
||||
|
|
|
|||
|
|
@ -1174,7 +1174,9 @@ RSpec.describe API::Helpers, feature_category: :shared do
|
|||
|
||||
it 'redirects to a CDN-fronted URL' do
|
||||
expect(helper).to receive(:redirect)
|
||||
expect(helper).to receive(:cdn_fronted_url).and_call_original
|
||||
expect_next_instance_of(ObjectStorage::CDN::FileUrl) do |instance|
|
||||
expect(instance).to receive(:url).and_call_original
|
||||
end
|
||||
expect(Gitlab::ApplicationContext).to receive(:push).with(artifact: artifact.file.model).and_call_original
|
||||
expect(Gitlab::ApplicationContext).to receive(:push).with(artifact_used_cdn: false).and_call_original
|
||||
|
||||
|
|
@ -1195,35 +1197,6 @@ RSpec.describe API::Helpers, feature_category: :shared do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#cdn_frontend_url' do
|
||||
before do
|
||||
allow(helper).to receive(:env).and_return({})
|
||||
|
||||
stub_artifacts_object_storage(enabled: true)
|
||||
end
|
||||
|
||||
context 'with a CI artifact' do
|
||||
let(:artifact) { create(:ci_job_artifact, :zip, :remote_store) }
|
||||
|
||||
it 'retrieves a CDN-fronted URL' do
|
||||
expect(artifact.file).to receive(:cdn_enabled_url).and_call_original
|
||||
expect(Gitlab::ApplicationContext).to receive(:push).with(artifact_used_cdn: false).and_call_original
|
||||
expect(helper.cdn_fronted_url(artifact.file)).to be_a(String)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a file upload' do
|
||||
let(:url) { 'https://example.com/path/to/upload' }
|
||||
|
||||
it 'retrieves the file URL' do
|
||||
file = double(url: url)
|
||||
|
||||
expect(Gitlab::ApplicationContext).not_to receive(:push)
|
||||
expect(helper.cdn_fronted_url(file)).to eq(url)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#order_by_similarity?' do
|
||||
where(:params, :allow_unauthorized, :current_user_set, :expected) do
|
||||
{} | false | false | false
|
||||
|
|
|
|||
|
|
@ -56,5 +56,21 @@ RSpec.describe Mutations::Integrations::Exclusions::Create, feature_category: :i
|
|||
expect(existing_exclusion.inherit_from_id).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'and the number of project ids exceeds the maximum' do
|
||||
let(:stubbed_limit) { 1 }
|
||||
let(:project_ids) { [project, project2].map { |p| p.to_global_id.to_s } }
|
||||
|
||||
before do
|
||||
stub_const("#{described_class.name}::MAX_PROJECT_IDS", stubbed_limit)
|
||||
end
|
||||
|
||||
it 'responds with an error' do
|
||||
resolve_mutation
|
||||
expect(graphql_errors.first['message']).to eq(
|
||||
"Count of projectIds should be less than #{stubbed_limit}"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -41,20 +41,28 @@ RSpec.describe Mutations::Integrations::Exclusions::Delete, feature_category: :i
|
|||
end
|
||||
|
||||
context 'and there are integrations' do
|
||||
let!(:instance_integration) { create(:beyond_identity_integration) }
|
||||
let!(:existing_exclusion) do
|
||||
create(:beyond_identity_integration, project: project, active: false, inherit_from_id: nil,
|
||||
instance: false)
|
||||
end
|
||||
|
||||
it 'enables the integration for the specified project' do
|
||||
resolve_mutation
|
||||
context 'and the integration is active for the instance' do
|
||||
let!(:instance_integration) { create(:beyond_identity_integration) }
|
||||
|
||||
existing_exclusion.reload
|
||||
expect(existing_exclusion).to be_activated
|
||||
expect(existing_exclusion.inherit_from_id).to eq(instance_integration.id)
|
||||
exclusion_response = graphql_data['integrationExclusionDelete']['exclusions'][0]
|
||||
expect(exclusion_response['project']['id']).to eq(project.to_global_id.to_s)
|
||||
it 'enables the integration for the specified project' do
|
||||
resolve_mutation
|
||||
|
||||
existing_exclusion.reload
|
||||
expect(existing_exclusion).to be_activated
|
||||
expect(existing_exclusion.inherit_from_id).to eq(instance_integration.id)
|
||||
exclusion_response = graphql_data['integrationExclusionDelete']['exclusions'][0]
|
||||
expect(exclusion_response['project']['id']).to eq(project.to_global_id.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
it 'deletes the integration' do
|
||||
expect { resolve_mutation }.to change { Integration.count }.from(1).to(0)
|
||||
expect(graphql_errors).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -149,26 +149,6 @@ RSpec.describe 'getting organization information', feature_category: :cell do
|
|||
expect(groups.pluck('id')).to match_array(expected_groups)
|
||||
end
|
||||
|
||||
context 'when resolve_all_organization_groups feature flag is disabled' do
|
||||
before do
|
||||
stub_feature_flags(resolve_all_organization_groups: false)
|
||||
end
|
||||
|
||||
it 'does not return ancestors of authorized groups' do
|
||||
request_organization
|
||||
|
||||
expect(groups.pluck('id')).not_to include(parent_group_global_id)
|
||||
end
|
||||
|
||||
it 'does not return all visible groups' do
|
||||
request_organization
|
||||
|
||||
visible_groups = [parent_group, organization_group]
|
||||
.map { |group| group.to_global_id.to_s }
|
||||
expect(groups.pluck('id')).not_to include(*visible_groups)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with `search` argument' do
|
||||
let(:search) { 'oth' }
|
||||
let(:organization_fields) do
|
||||
|
|
|
|||
|
|
@ -716,11 +716,14 @@ RSpec.describe API::Issues, feature_category: :team_planning do
|
|||
end
|
||||
|
||||
it 'returns 404 if issue id not found' do
|
||||
get api("/projects/#{project.id}/issues/54321", user)
|
||||
get api("/projects/#{project.id}/issues/#{non_existing_record_id}", user)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it 'returns 404 if the issue ID is used' do
|
||||
# Make sure other issues don't exist with a matching iid
|
||||
Issue.where.not(id: issue.id).delete_all
|
||||
|
||||
get api("/projects/#{project.id}/issues/#{issue.id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ RSpec.shared_examples 'issuable participants endpoint' do
|
|||
end
|
||||
|
||||
it 'returns a 404 when id is used instead of iid' do
|
||||
# Make sure other entities don't exist with a matching iid
|
||||
entity.class.where.not(id: entity.id).delete_all
|
||||
|
||||
get api("/projects/#{project.id}/#{area}/#{entity.id}/participants", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe ObjectStorage::CDN::FileUrl, feature_category: :source_code_management do
|
||||
subject(:file_url) do
|
||||
described_class.new(
|
||||
file: file,
|
||||
ip_address: ip_address,
|
||||
redirect_params: redirect_params)
|
||||
end
|
||||
|
||||
let(:ip_address) { '127.0.0.1' }
|
||||
let(:redirect_params) { {} }
|
||||
|
||||
describe '#url' do
|
||||
before do
|
||||
stub_artifacts_object_storage(enabled: true)
|
||||
end
|
||||
|
||||
context 'with a CI artifact' do
|
||||
let(:file) { create(:ci_job_artifact, :zip, :remote_store).file }
|
||||
|
||||
it 'retrieves a CDN-frontend URL' do
|
||||
expect(::Gitlab::ApplicationContext).to receive(:push).with(artifact_used_cdn: false).and_call_original
|
||||
expect(file_url.url).to be_a(String)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a file upload' do
|
||||
let(:expected_url) { 'https://example.com/path/to/upload' }
|
||||
let(:file) { instance_double(::GitlabUploader, url: expected_url) }
|
||||
|
||||
it 'retrieves the file URL' do
|
||||
expect(::Gitlab::ApplicationContext).not_to receive(:push)
|
||||
expect(file_url.url).to eq(expected_url)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Reference in New Issue