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:
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/ci/runner/components/runner_list_header.vue2
-rw-r--r--app/assets/javascripts/ide/components/activity_bar.vue2
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/actions.vue1
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/form.vue2
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/list_item.vue6
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/message_field.vue1
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/radio_group.vue1
-rw-r--r--app/assets/javascripts/ide/components/error_message.vue1
-rw-r--r--app/assets/javascripts/ide/components/file_templates/bar.vue4
-rw-r--r--app/assets/javascripts/ide/components/ide.vue1
-rw-r--r--app/assets/javascripts/ide/components/ide_project_header.vue6
-rw-r--r--app/assets/javascripts/ide/components/ide_sidebar_nav.vue1
-rw-r--r--app/assets/javascripts/ide/components/ide_status_bar.vue1
-rw-r--r--app/assets/javascripts/ide/components/ide_tree.vue2
-rw-r--r--app/assets/javascripts/ide/components/ide_tree_list.vue2
-rw-r--r--app/assets/javascripts/ide/components/new_dropdown/index.vue3
-rw-r--r--app/assets/javascripts/ide/components/new_dropdown/modal.vue7
-rw-r--r--app/assets/javascripts/ide/components/new_dropdown/upload.vue1
-rw-r--r--app/assets/javascripts/ide/components/panes/collapsible_sidebar.vue6
-rw-r--r--app/assets/javascripts/ide/components/repo_editor.vue1
-rw-r--r--app/assets/javascripts/ide/components/shared/commit_message_field.vue1
-rw-r--r--app/assets/javascripts/ide/components/terminal/empty_state.vue8
-rw-r--r--app/assets/javascripts/ide/components/terminal/terminal.vue3
-rw-r--r--app/assets/javascripts/pages/projects/shared/permissions/components/ci_catalog_settings.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/changed_file_icon.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/content_viewer/content_viewer.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue9
-rw-r--r--app/assets/javascripts/vue_shared/components/content_viewer/viewers/image_viewer.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/file_icon.vue8
-rw-r--r--app/assets/javascripts/vue_shared/components/file_row.vue6
-rw-r--r--app/assets/javascripts/vue_shared/components/web_ide/confirm_fork_modal.vue2
-rw-r--r--app/controllers/admin/application_settings_controller.rb4
-rw-r--r--app/models/ci/build.rb7
-rw-r--r--app/models/ci/build_metadata.rb11
-rw-r--r--app/models/ci/catalog/resource.rb5
-rw-r--r--app/models/ci/catalog/resources/version.rb9
-rw-r--r--app/models/ci/pipeline.rb48
-rw-r--r--app/models/ci/stage.rb44
-rw-r--r--app/models/commit_status.rb7
-rw-r--r--app/models/concerns/ci/metadatable.rb2
-rw-r--r--app/models/concerns/ci/partitionable.rb4
-rw-r--r--app/models/release.rb7
-rw-r--r--app/services/packages/debian/extract_metadata_service.rb4
-rw-r--r--app/services/packages/helm/extract_file_metadata_service.rb4
-rw-r--r--app/services/packages/nuget/process_package_file_service.rb4
-rw-r--r--app/services/quick_actions/interpret_service.rb4
-rw-r--r--app/uploaders/gitlab_uploader.rb4
47 files changed, 137 insertions, 127 deletions
diff --git a/app/assets/javascripts/ci/runner/components/runner_list_header.vue b/app/assets/javascripts/ci/runner/components/runner_list_header.vue
index e4367db035e..6ed271d15ab 100644
--- a/app/assets/javascripts/ci/runner/components/runner_list_header.vue
+++ b/app/assets/javascripts/ci/runner/components/runner_list_header.vue
@@ -7,7 +7,7 @@ export default {
<header
class="gl-my-5 gl-display-flex gl-align-items-flex-start gl-flex-wrap gl-justify-content-space-between"
>
- <h1 v-if="$scopedSlots.title" class="gl-my-0 gl-font-size-h1 header-title">
+ <h1 v-if="$scopedSlots.title" class="gl-mt-0 gl-mb-3 gl-font-size-h1 header-title">
<slot name="title"></slot>
</h1>
<div v-if="$scopedSlots.actions" class="gl-display-flex gl-gap-3">
diff --git a/app/assets/javascripts/ide/components/activity_bar.vue b/app/assets/javascripts/ide/components/activity_bar.vue
index 44a94f5fefe..ef808c8218a 100644
--- a/app/assets/javascripts/ide/components/activity_bar.vue
+++ b/app/assets/javascripts/ide/components/activity_bar.vue
@@ -43,7 +43,6 @@ export default {
:aria-label="s__('IDE|Edit')"
data-container="body"
data-placement="right"
- data-qa-selector="edit_mode_tab"
data-testid="edit-mode-button"
type="button"
class="ide-sidebar-link js-ide-edit-mode"
@@ -80,7 +79,6 @@ export default {
:aria-label="s__('IDE|Commit')"
data-container="body"
data-placement="right"
- data-qa-selector="commit_mode_tab"
data-testid="commit-mode-button"
type="button"
class="ide-sidebar-link js-ide-commit-mode"
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/actions.vue b/app/assets/javascripts/ide/components/commit_sidebar/actions.vue
index bc8496e359c..8765808cf0c 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/actions.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/actions.vue
@@ -78,7 +78,6 @@ export default {
:value="$options.commitToCurrentBranch"
:disabled="!canPushToBranch"
:title="$options.currentBranchPermissionsTooltip"
- data-qa-selector="commit_to_current_branch_radio_container"
>
<span class="ide-option-label">
<gl-sprintf :message="s__('IDE|Commit to %{branchName} branch')">
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/form.vue b/app/assets/javascripts/ide/components/commit_sidebar/form.vue
index 281a3054721..708b5d84e5b 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/form.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/form.vue
@@ -159,7 +159,6 @@ export default {
category="primary"
variant="confirm"
block
- data-qa-selector="begin_commit_button"
data-testid="begin-commit-button"
@click="beginCommit"
>
@@ -187,7 +186,6 @@ export default {
:disabled="commitButtonDisabled"
:loading="submitCommitLoading"
data-testid="commit-button"
- data-qa-selector="commit_button"
category="primary"
variant="confirm"
type="submit"
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue b/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue
index 69d84bcc6aa..5ee28ae58bb 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue
@@ -86,11 +86,7 @@ export default {
role="button"
@click="openFileInEditor"
>
- <span
- class="multi-file-commit-list-file-path d-flex align-items-center"
- data-qa-selector="file_to_commit_content"
- :data-qa-file-name="file.name"
- >
+ <span class="multi-file-commit-list-file-path d-flex align-items-center">
<file-icon :file-name="file.name" class="gl-mr-3" />
<template v-if="file.prevName && file.prevName !== file.name">
{{ file.prevName }} &#x2192;
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/message_field.vue b/app/assets/javascripts/ide/components/commit_sidebar/message_field.vue
index d05aa960f01..372ff9812ac 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/message_field.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/message_field.vue
@@ -112,7 +112,6 @@ export default {
:placeholder="placeholder"
:value="text"
class="note-textarea ide-commit-message-textarea"
- data-qa-selector="ide_commit_message_field"
dir="auto"
name="commit-message"
@scroll="handleScroll"
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/radio_group.vue b/app/assets/javascripts/ide/components/commit_sidebar/radio_group.vue
index 38b71e3da73..0c1faad1573 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/radio_group.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/radio_group.vue
@@ -76,7 +76,6 @@ export default {
:value="value"
:disabled="disabled"
name="commit-action"
- data-qa-selector="commit_type_radio"
@change="updateCommitAction(value)"
>
<span v-if="label" class="ide-option-label">
diff --git a/app/assets/javascripts/ide/components/error_message.vue b/app/assets/javascripts/ide/components/error_message.vue
index ce3d8f53fd2..0eb781e0ba2 100644
--- a/app/assets/javascripts/ide/components/error_message.vue
+++ b/app/assets/javascripts/ide/components/error_message.vue
@@ -53,7 +53,6 @@ export default {
<template>
<gl-alert
- data-qa-selector="flash_alert"
variant="danger"
:dismissible="canDismiss"
:primary-button-text="message.actionText"
diff --git a/app/assets/javascripts/ide/components/file_templates/bar.vue b/app/assets/javascripts/ide/components/file_templates/bar.vue
index 287ebc99662..e24e1468b6c 100644
--- a/app/assets/javascripts/ide/components/file_templates/bar.vue
+++ b/app/assets/javascripts/ide/components/file_templates/bar.vue
@@ -84,7 +84,6 @@ export default {
<div
class="gl-display-flex gl-align-items-center ide-file-templates gl-relative gl-z-index-1"
data-testid="file-templates-bar"
- data-qa-selector="file_templates_container"
>
<strong class="gl-mr-3"> {{ $options.i18n.barLabel }} </strong>
<gl-dropdown
@@ -102,12 +101,11 @@ export default {
<gl-dropdown
v-if="showTemplatesDropdown"
class="gl-mr-6"
- data-qa-selector="file_template_dropdown"
:text="$options.i18n.templateListDropdownLabel"
@show="fetchTemplateTypes"
>
<template #header>
- <gl-search-box-by-type v-model.trim="search" data-qa-selector="dropdown_filter_input" />
+ <gl-search-box-by-type v-model.trim="search" />
</template>
<div>
<gl-loading-icon v-if="isLoading" />
diff --git a/app/assets/javascripts/ide/components/ide.vue b/app/assets/javascripts/ide/components/ide.vue
index 6cb26643b66..a850d37c4c0 100644
--- a/app/assets/javascripts/ide/components/ide.vue
+++ b/app/assets/javascripts/ide/components/ide.vue
@@ -186,7 +186,6 @@ export default {
category="primary"
:title="__('New file')"
:aria-label="__('New file')"
- data-qa-selector="first_file_button"
@click="createNewFile()"
>
{{ __('New file') }}
diff --git a/app/assets/javascripts/ide/components/ide_project_header.vue b/app/assets/javascripts/ide/components/ide_project_header.vue
index 3296dc2060c..6e1a4cd8e99 100644
--- a/app/assets/javascripts/ide/components/ide_project_header.vue
+++ b/app/assets/javascripts/ide/components/ide_project_header.vue
@@ -25,11 +25,7 @@ export default {
/>
<span class="ide-sidebar-project-title">
<span class="sidebar-context-title"> {{ project.name }} </span>
- <span
- class="sidebar-context-title text-secondary"
- data-qa-selector="project_path_content"
- :data-qa-project-path="project.path_with_namespace"
- >
+ <span class="sidebar-context-title text-secondary">
{{ project.path_with_namespace }}
</span>
</span>
diff --git a/app/assets/javascripts/ide/components/ide_sidebar_nav.vue b/app/assets/javascripts/ide/components/ide_sidebar_nav.vue
index d8daf3b7ad6..172c622e195 100644
--- a/app/assets/javascripts/ide/components/ide_sidebar_nav.vue
+++ b/app/assets/javascripts/ide/components/ide_sidebar_nav.vue
@@ -71,7 +71,6 @@ export default {
:title="tab.title"
:aria-label="tab.title"
:class="buttonClasses(tab)"
- :data-qa-selector="`${tab.title.toLowerCase()}_tab_button`"
class="ide-sidebar-link"
type="button"
@click="clickTab($event, tab)"
diff --git a/app/assets/javascripts/ide/components/ide_status_bar.vue b/app/assets/javascripts/ide/components/ide_status_bar.vue
index 984dc9edaf1..e56d8ef109a 100644
--- a/app/assets/javascripts/ide/components/ide_status_bar.vue
+++ b/app/assets/javascripts/ide/components/ide_status_bar.vue
@@ -106,7 +106,6 @@ export default {
:href="getCommitPath(lastCommit.short_id)"
class="commit-sha"
data-testid="commit-sha-content"
- data-qa-selector="commit_sha_content"
>{{ lastCommit.short_id }}</a
>
by
diff --git a/app/assets/javascripts/ide/components/ide_tree.vue b/app/assets/javascripts/ide/components/ide_tree.vue
index 427b3743961..5999d349ca8 100644
--- a/app/assets/javascripts/ide/components/ide_tree.vue
+++ b/app/assets/javascripts/ide/components/ide_tree.vue
@@ -61,7 +61,6 @@ export default {
:show-label="false"
class="gl-display-flex gl-border-0 gl-p-0 gl-mr-5"
icon="doc-new"
- data-qa-selector="new_file_button"
@click="createNewFile()"
/>
<upload
@@ -75,7 +74,6 @@ export default {
:show-label="false"
class="gl-display-flex gl-border-0 gl-p-0"
icon="folder-new"
- data-qa-selector="new_directory_button"
@click="createNewFolder()"
/>
</div>
diff --git a/app/assets/javascripts/ide/components/ide_tree_list.vue b/app/assets/javascripts/ide/components/ide_tree_list.vue
index f2a97e62190..7c3441b8cd0 100644
--- a/app/assets/javascripts/ide/components/ide_tree_list.vue
+++ b/app/assets/javascripts/ide/components/ide_tree_list.vue
@@ -53,7 +53,7 @@ export default {
</script>
<template>
- <div class="ide-file-list" data-qa-selector="file_list_container">
+ <div class="ide-file-list">
<template v-if="showLoading">
<div v-for="n in 3" :key="n" class="multi-file-loading-container">
<gl-skeleton-loader />
diff --git a/app/assets/javascripts/ide/components/new_dropdown/index.vue b/app/assets/javascripts/ide/components/new_dropdown/index.vue
index 7cd415169cc..5e71470f383 100644
--- a/app/assets/javascripts/ide/components/new_dropdown/index.vue
+++ b/app/assets/javascripts/ide/components/new_dropdown/index.vue
@@ -66,7 +66,6 @@ export default {
:aria-label="__('Create new file or directory')"
type="button"
class="rounded border-0 d-flex ide-entry-dropdown-toggle"
- data-qa-selector="dropdown_button"
@click.stop="openDropdown()"
>
<gl-icon name="ellipsis_v" />
@@ -100,7 +99,6 @@ export default {
class="d-flex"
icon="pencil"
icon-classes="mr-2"
- data-qa-selector="rename_move_button"
@click="createNewItem($options.modalTypes.rename)"
/>
</li>
@@ -110,7 +108,6 @@ export default {
class="d-flex"
icon="remove"
icon-classes="mr-2"
- data-qa-selector="delete_button"
@click="deleteEntry(path)"
/>
</li>
diff --git a/app/assets/javascripts/ide/components/new_dropdown/modal.vue b/app/assets/javascripts/ide/components/new_dropdown/modal.vue
index ba1258f8b50..1e4eca23cb5 100644
--- a/app/assets/javascripts/ide/components/new_dropdown/modal.vue
+++ b/app/assets/javascripts/ide/components/new_dropdown/modal.vue
@@ -157,7 +157,6 @@ export default {
<gl-modal
ref="modal"
modal-id="ide-new-entry"
- data-qa-selector="new_file_modal"
data-testid="ide-new-entry"
:title="modalTitle"
size="lg"
@@ -179,11 +178,7 @@ export default {
:placeholder="placeholder"
/>
</form>
- <ul
- v-if="isCreatingNewFile"
- class="file-templates gl-mt-3 list-inline"
- data-qa-selector="template_list_content"
- >
+ <ul v-if="isCreatingNewFile" class="file-templates gl-mt-3 list-inline">
<li v-for="(template, index) in templateTypes" :key="index" class="list-inline-item">
<gl-button
variant="dashed"
diff --git a/app/assets/javascripts/ide/components/new_dropdown/upload.vue b/app/assets/javascripts/ide/components/new_dropdown/upload.vue
index 9664c5bc597..69cf5c9b252 100644
--- a/app/assets/javascripts/ide/components/new_dropdown/upload.vue
+++ b/app/assets/javascripts/ide/components/new_dropdown/upload.vue
@@ -82,7 +82,6 @@ export default {
type="file"
class="hidden"
multiple
- data-qa-selector="file_upload_field"
@change="openFile"
/>
</li>
diff --git a/app/assets/javascripts/ide/components/panes/collapsible_sidebar.vue b/app/assets/javascripts/ide/components/panes/collapsible_sidebar.vue
index ce55d88437d..95d38da508e 100644
--- a/app/assets/javascripts/ide/components/panes/collapsible_sidebar.vue
+++ b/app/assets/javascripts/ide/components/panes/collapsible_sidebar.vue
@@ -74,11 +74,7 @@ export default {
</script>
<template>
- <div
- :class="`ide-${side}-sidebar`"
- :data-qa-selector="`ide_${side}_sidebar`"
- class="multi-file-commit-panel ide-sidebar"
- >
+ <div :class="`ide-${side}-sidebar`" class="multi-file-commit-panel ide-sidebar">
<div
v-show="isOpen"
:class="`ide-${side}-sidebar-${currentView}`"
diff --git a/app/assets/javascripts/ide/components/repo_editor.vue b/app/assets/javascripts/ide/components/repo_editor.vue
index 3b59fe86764..8f4f777d396 100644
--- a/app/assets/javascripts/ide/components/repo_editor.vue
+++ b/app/assets/javascripts/ide/components/repo_editor.vue
@@ -543,7 +543,6 @@ export default {
'is-added': file.tempFile,
}"
class="multi-file-editor-holder"
- data-qa-selector="editor_container"
data-testid="editor-container"
:data-editor-loading="isEditorLoading"
@focusout="triggerFilesChange"
diff --git a/app/assets/javascripts/ide/components/shared/commit_message_field.vue b/app/assets/javascripts/ide/components/shared/commit_message_field.vue
index 428cf7f55ac..e7725054329 100644
--- a/app/assets/javascripts/ide/components/shared/commit_message_field.vue
+++ b/app/assets/javascripts/ide/components/shared/commit_message_field.vue
@@ -121,7 +121,6 @@ export default {
:placeholder="placeholder"
:value="text"
class="gl-absolute gl-w-full gl-h-full gl-z-index-2 gl-font-monospace p-0 gl-outline-0 gl-bg-transparent gl-border-0"
- data-qa-selector="ide_commit_message_field"
dir="auto"
name="commit-message"
@scroll="handleScroll"
diff --git a/app/assets/javascripts/ide/components/terminal/empty_state.vue b/app/assets/javascripts/ide/components/terminal/empty_state.vue
index fa93f6d42a5..e7dcf2ca6b6 100644
--- a/app/assets/javascripts/ide/components/terminal/empty_state.vue
+++ b/app/assets/javascripts/ide/components/terminal/empty_state.vue
@@ -53,13 +53,7 @@ export default {
<template v-else>
<p>{{ __('Run tests against your code live using the Web Terminal') }}</p>
<p>
- <gl-button
- :disabled="!isValid"
- category="primary"
- variant="confirm"
- data-qa-selector="start_web_terminal_button"
- @click="onStart"
- >
+ <gl-button :disabled="!isValid" category="primary" variant="confirm" @click="onStart">
{{ __('Start Web Terminal') }}
</gl-button>
</p>
diff --git a/app/assets/javascripts/ide/components/terminal/terminal.vue b/app/assets/javascripts/ide/components/terminal/terminal.vue
index b2e90a64758..b34febe5f1d 100644
--- a/app/assets/javascripts/ide/components/terminal/terminal.vue
+++ b/app/assets/javascripts/ide/components/terminal/terminal.vue
@@ -95,7 +95,7 @@ export default {
<template>
<div class="d-flex flex-column flex-fill min-height-0 pr-3">
<div class="top-bar d-flex border-left-0 align-items-center">
- <div v-if="loadingText" data-qa-selector="loading_container">
+ <div v-if="loadingText">
<gl-loading-icon size="sm" :inline="true" />
<span>{{ loadingText }}</span>
</div>
@@ -113,7 +113,6 @@ export default {
ref="terminal"
class="ide-terminal-trace flex-fill min-height-0 w-100"
:data-project-path="terminalPath"
- data-qa-selector="terminal_screen"
></div>
</div>
</div>
diff --git a/app/assets/javascripts/pages/projects/shared/permissions/components/ci_catalog_settings.vue b/app/assets/javascripts/pages/projects/shared/permissions/components/ci_catalog_settings.vue
index ed5ba3c2653..c9c3856423e 100644
--- a/app/assets/javascripts/pages/projects/shared/permissions/components/ci_catalog_settings.vue
+++ b/app/assets/javascripts/pages/projects/shared/permissions/components/ci_catalog_settings.vue
@@ -129,7 +129,7 @@ export default {
<label class="gl-mb-1 gl-mr-2">
{{ $options.i18n.ciCatalogLabel }}
</label>
- <gl-badge size="sm" variant="info"> {{ $options.i18n.badgeText }} </gl-badge>
+ <gl-badge size="sm" variant="neutral"> {{ $options.i18n.badgeText }} </gl-badge>
</div>
<gl-sprintf :message="$options.i18n.ciCatalogHelpText">
<template #link="{ content }">
diff --git a/app/assets/javascripts/vue_shared/components/changed_file_icon.vue b/app/assets/javascripts/vue_shared/components/changed_file_icon.vue
index 2a47e96b2e2..5a807d10f24 100644
--- a/app/assets/javascripts/vue_shared/components/changed_file_icon.vue
+++ b/app/assets/javascripts/vue_shared/components/changed_file_icon.vue
@@ -82,8 +82,6 @@ export default {
:title="tooltipTitle"
:class="{ 'ml-auto': isCentered }"
class="file-changed-icon d-inline-block"
- data-qa-selector="changed_file_icon_content"
- :data-qa-title="tooltipTitle"
>
<gl-icon v-if="showIcon" :name="changedIcon" :size="size" :class="changedIconClass" />
</span>
diff --git a/app/assets/javascripts/vue_shared/components/content_viewer/content_viewer.vue b/app/assets/javascripts/vue_shared/components/content_viewer/content_viewer.vue
index 1370f7b2a8c..7b9ecc18ce1 100644
--- a/app/assets/javascripts/vue_shared/components/content_viewer/content_viewer.vue
+++ b/app/assets/javascripts/vue_shared/components/content_viewer/content_viewer.vue
@@ -54,7 +54,7 @@ export default {
</script>
<template>
- <div class="preview-container" data-qa-selector="preview_container">
+ <div class="preview-container">
<image-viewer v-if="type === 'image'" :path="path" :file-size="fileSize" />
<markdown-viewer
v-if="type === 'markdown'"
diff --git a/app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue b/app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue
index f28a2801bc0..332424c70ac 100644
--- a/app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue
+++ b/app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue
@@ -41,14 +41,7 @@ export default {
{{ fileName }}
<template v-if="fileSize > 0"> ({{ fileSizeReadable }}) </template>
</p>
- <a
- :href="path"
- class="btn btn-default"
- rel="nofollow"
- :download="fileName"
- target="_blank"
- data-qa-selector="download_button"
- >
+ <a :href="path" class="btn btn-default" rel="nofollow" :download="fileName" target="_blank">
<gl-icon :size="16" name="download" class="float-left gl-mr-3" />
{{ __('Download') }}
</a>
diff --git a/app/assets/javascripts/vue_shared/components/content_viewer/viewers/image_viewer.vue b/app/assets/javascripts/vue_shared/components/content_viewer/viewers/image_viewer.vue
index 04ab0fd00aa..9742118cd5f 100644
--- a/app/assets/javascripts/vue_shared/components/content_viewer/viewers/image_viewer.vue
+++ b/app/assets/javascripts/vue_shared/components/content_viewer/viewers/image_viewer.vue
@@ -88,7 +88,7 @@ export default {
</script>
<template>
- <div data-testid="image-viewer" data-qa-selector="image_viewer_container">
+ <div data-testid="image-viewer">
<div :class="innerCssClasses" class="position-relative">
<img ref="contentImg" :src="safePath" @load="onImgLoad" />
<slot
diff --git a/app/assets/javascripts/vue_shared/components/file_icon.vue b/app/assets/javascripts/vue_shared/components/file_icon.vue
index 6a10557c6bc..4738d0f5a38 100644
--- a/app/assets/javascripts/vue_shared/components/file_icon.vue
+++ b/app/assets/javascripts/vue_shared/components/file_icon.vue
@@ -90,12 +90,6 @@ export default {
<svg v-else-if="!folder" :key="spriteHref" :class="[iconSizeClass, cssClasses]">
<use :href="spriteHref" />
</svg>
- <gl-icon
- v-else
- :name="folderIconName"
- :size="size"
- class="folder-icon"
- data-qa-selector="folder_icon_content"
- />
+ <gl-icon v-else :name="folderIconName" :size="size" class="folder-icon" />
</span>
</template>
diff --git a/app/assets/javascripts/vue_shared/components/file_row.vue b/app/assets/javascripts/vue_shared/components/file_row.vue
index cecd1be82e9..6ac75230d88 100644
--- a/app/assets/javascripts/vue_shared/components/file_row.vue
+++ b/app/assets/javascripts/vue_shared/components/file_row.vue
@@ -132,11 +132,7 @@ export default {
@click="clickFile"
@mouseleave="$emit('mouseleave', $event)"
>
- <div
- class="file-row-name-container"
- data-qa-selector="file_row_container"
- :data-qa-file-name="file.name"
- >
+ <div class="file-row-name-container">
<span
ref="textOutput"
class="file-row-name"
diff --git a/app/assets/javascripts/vue_shared/components/web_ide/confirm_fork_modal.vue b/app/assets/javascripts/vue_shared/components/web_ide/confirm_fork_modal.vue
index b4afb27c497..96b2bd37080 100644
--- a/app/assets/javascripts/vue_shared/components/web_ide/confirm_fork_modal.vue
+++ b/app/assets/javascripts/vue_shared/components/web_ide/confirm_fork_modal.vue
@@ -82,7 +82,6 @@ export default {
attributes: {
href: this.forkPath,
variant: 'confirm',
- 'data-qa-selector': 'fork_project_button',
},
},
};
@@ -94,7 +93,6 @@ export default {
<template>
<gl-modal
:visible="visible"
- data-qa-selector="confirm_fork_modal"
:modal-id="modalId"
:title="$options.i18n.title"
:action-primary="btnActions.primary"
diff --git a/app/controllers/admin/application_settings_controller.rb b/app/controllers/admin/application_settings_controller.rb
index 8cf0ab60fd3..b5edecbd6a5 100644
--- a/app/controllers/admin/application_settings_controller.rb
+++ b/app/controllers/admin/application_settings_controller.rb
@@ -164,10 +164,6 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
params.delete(:domain_denylist_raw) if params[:domain_denylist]
params.delete(:domain_allowlist_raw) if params[:domain_allowlist]
- if params[:application_setting].key?(:user_email_lookup_limit)
- params[:application_setting][:search_rate_limit] ||= params[:application_setting][:user_email_lookup_limit]
- end
-
params[:application_setting].permit(visible_application_setting_attributes)
end
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 0bb93a68470..284495a1d97 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -19,7 +19,12 @@ module Ci
belongs_to :runner
belongs_to :trigger_request
belongs_to :erased_by, class_name: 'User'
- belongs_to :pipeline, class_name: 'Ci::Pipeline', foreign_key: :commit_id, inverse_of: :builds
+ belongs_to :pipeline,
+ ->(build) { in_partition(build) },
+ class_name: 'Ci::Pipeline',
+ foreign_key: :commit_id,
+ partition_foreign_key: :partition_id,
+ inverse_of: :builds
RUNNER_FEATURES = {
upload_multiple_artifacts: -> (build) { build.publishes_artifacts_reports? },
diff --git a/app/models/ci/build_metadata.rb b/app/models/ci/build_metadata.rb
index 555565ff621..4194be7c0af 100644
--- a/app/models/ci/build_metadata.rb
+++ b/app/models/ci/build_metadata.rb
@@ -14,9 +14,14 @@ module Ci
self.table_name = 'p_ci_builds_metadata'
self.primary_key = 'id'
+ query_constraints :id, :partition_id
partitionable scope: :build, partitioned: true
- belongs_to :build, class_name: 'CommitStatus'
+ belongs_to :build, # rubocop: disable Rails/InverseOf -- this relation is not present on CommitStatus
+ ->(metadata) { in_partition(metadata) },
+ partition_foreign_key: :partition_id,
+ class_name: 'CommitStatus'
+
belongs_to :project
before_create :set_build_project
@@ -42,6 +47,10 @@ module Ci
job_timeout_source: 4
}
+ def self.use_partition_id_filter?
+ Ci::Pipeline.use_partition_id_filter?
+ end
+
def update_timeout_state
timeout = timeout_with_highest_precedence
diff --git a/app/models/ci/catalog/resource.rb b/app/models/ci/catalog/resource.rb
index 3ead852e834..8bfef225e05 100644
--- a/app/models/ci/catalog/resource.rb
+++ b/app/models/ci/catalog/resource.rb
@@ -50,6 +50,11 @@ module Ci
save!
end
+ # Triggered in Ci::Catalog::Resources::Version and Release model callbacks.
+ def update_latest_released_at!
+ update!(latest_released_at: versions.latest&.released_at)
+ end
+
private
# These columns are denormalized from the `projects` table. We first sync these
diff --git a/app/models/ci/catalog/resources/version.rb b/app/models/ci/catalog/resources/version.rb
index bd0ebc77a6d..ab4d5c52526 100644
--- a/app/models/ci/catalog/resources/version.rb
+++ b/app/models/ci/catalog/resources/version.rb
@@ -28,6 +28,9 @@ module Ci
delegate :name, :description, :tag, :sha, :released_at, :author_id, to: :release
+ after_destroy :update_catalog_resource
+ after_save :update_catalog_resource
+
class << self
# In the future, we should support semantic versioning.
# See https://gitlab.com/gitlab-org/gitlab/-/issues/427286
@@ -110,6 +113,12 @@ module Ci
end
end
end
+
+ private
+
+ def update_catalog_resource
+ catalog_resource.update_latest_released_at!
+ end
end
end
end
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 54aa3d78cf3..faa79f8f49c 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -80,31 +80,31 @@ module Ci
# Ci:Job models. With that epic, we aim to replace `statuses` with `jobs`.
#
# DEPRECATED:
- has_many :statuses, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline
- has_many :processables, class_name: 'Ci::Processable', foreign_key: :commit_id, inverse_of: :pipeline
- has_many :latest_statuses_ordered_by_stage, -> { latest.order(:stage_idx, :stage) }, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline
- has_many :latest_statuses, -> { latest }, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline
- has_many :statuses_order_id_desc, -> { order_id_desc }, class_name: 'CommitStatus', foreign_key: :commit_id,
- inverse_of: :pipeline
- has_many :bridges, class_name: 'Ci::Bridge', foreign_key: :commit_id, inverse_of: :pipeline
- has_many :builds, foreign_key: :commit_id, inverse_of: :pipeline
- has_many :generic_commit_statuses, foreign_key: :commit_id, inverse_of: :pipeline, class_name: 'GenericCommitStatus'
+ has_many :statuses, ->(pipeline) { in_partition(pipeline) }, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :processables, ->(pipeline) { in_partition(pipeline) }, class_name: 'Ci::Processable', foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :latest_statuses_ordered_by_stage, -> (pipeline) { latest.in_partition(pipeline).order(:stage_idx, :stage) }, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :latest_statuses, ->(pipeline) { latest.in_partition(pipeline) }, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :statuses_order_id_desc, ->(pipeline) { in_partition(pipeline).order_id_desc }, class_name: 'CommitStatus', foreign_key: :commit_id,
+ inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :bridges, ->(pipeline) { in_partition(pipeline) }, class_name: 'Ci::Bridge', foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :builds, ->(pipeline) { in_partition(pipeline) }, foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :generic_commit_statuses, ->(pipeline) { in_partition(pipeline) }, foreign_key: :commit_id, inverse_of: :pipeline, class_name: 'GenericCommitStatus', partition_foreign_key: :partition_id
#
# NEW:
- has_many :all_jobs, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline
- has_many :current_jobs, -> { latest }, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline
- has_many :all_processable_jobs, class_name: 'Ci::Processable', foreign_key: :commit_id, inverse_of: :pipeline
- has_many :current_processable_jobs, -> { latest }, class_name: 'Ci::Processable', foreign_key: :commit_id, inverse_of: :pipeline
+ has_many :all_jobs, ->(pipeline) { in_partition(pipeline) }, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :current_jobs, ->(pipeline) { latest.in_partition(pipeline) }, class_name: 'CommitStatus', foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :all_processable_jobs, ->(pipeline) { in_partition(pipeline) }, class_name: 'Ci::Processable', foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
+ has_many :current_processable_jobs, ->(pipeline) { latest.in_partition(pipeline) }, class_name: 'Ci::Processable', foreign_key: :commit_id, inverse_of: :pipeline, partition_foreign_key: :partition_id
has_many :job_artifacts, through: :builds
has_many :build_trace_chunks, class_name: 'Ci::BuildTraceChunk', through: :builds, source: :trace_chunks
has_many :trigger_requests, dependent: :destroy, foreign_key: :commit_id, inverse_of: :pipeline # rubocop:disable Cop/ActiveRecordDependent
has_many :variables, class_name: 'Ci::PipelineVariable'
- has_many :latest_builds, -> { latest.with_project_and_metadata }, foreign_key: :commit_id, inverse_of: :pipeline, class_name: 'Ci::Build'
+ has_many :latest_builds, ->(pipeline) { in_partition(pipeline).latest.with_project_and_metadata }, foreign_key: :commit_id, inverse_of: :pipeline, class_name: 'Ci::Build'
has_many :downloadable_artifacts, -> do
not_expired.or(where_exists(Ci::Pipeline.artifacts_locked.where("#{Ci::Pipeline.quoted_table_name}.id = #{Ci::Build.quoted_table_name}.commit_id"))).downloadable.with_job
end, through: :latest_builds, source: :job_artifacts
- has_many :latest_successful_jobs, -> { latest.success.with_project_and_metadata }, foreign_key: :commit_id, inverse_of: :pipeline, class_name: 'Ci::Processable'
+ has_many :latest_successful_jobs, ->(pipeline) { in_partition(pipeline).latest.success.with_project_and_metadata }, foreign_key: :commit_id, inverse_of: :pipeline, class_name: 'Ci::Processable'
has_many :messages, class_name: 'Ci::PipelineMessage', inverse_of: :pipeline
@@ -113,14 +113,14 @@ module Ci
has_many :merge_requests_as_head_pipeline, foreign_key: :head_pipeline_id, class_name: 'MergeRequest',
inverse_of: :head_pipeline
- has_many :pending_builds, -> { pending }, foreign_key: :commit_id, class_name: 'Ci::Build', inverse_of: :pipeline
- has_many :failed_builds, -> { latest.failed }, foreign_key: :commit_id, class_name: 'Ci::Build',
+ has_many :pending_builds, ->(pipeline) { in_partition(pipeline).pending }, foreign_key: :commit_id, class_name: 'Ci::Build', inverse_of: :pipeline
+ has_many :failed_builds, ->(pipeline) { in_partition(pipeline).latest.failed }, foreign_key: :commit_id, class_name: 'Ci::Build',
inverse_of: :pipeline
- has_many :retryable_builds, -> { latest.failed_or_canceled.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Build', inverse_of: :pipeline
- has_many :cancelable_statuses, -> { cancelable }, foreign_key: :commit_id, class_name: 'CommitStatus',
+ has_many :retryable_builds, ->(pipeline) { in_partition(pipeline).latest.failed_or_canceled.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Build', inverse_of: :pipeline
+ has_many :cancelable_statuses, ->(pipeline) { in_partition(pipeline).cancelable }, foreign_key: :commit_id, class_name: 'CommitStatus',
inverse_of: :pipeline
- has_many :manual_actions, -> { latest.manual_actions.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Processable', inverse_of: :pipeline
- has_many :scheduled_actions, -> { latest.scheduled_actions.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Build', inverse_of: :pipeline
+ has_many :manual_actions, ->(pipeline) { in_partition(pipeline).latest.manual_actions.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Processable', inverse_of: :pipeline
+ has_many :scheduled_actions, ->(pipeline) { in_partition(pipeline).latest.scheduled_actions.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Build', inverse_of: :pipeline
has_many :auto_canceled_pipelines, class_name: 'Ci::Pipeline', foreign_key: :auto_canceled_by_id,
inverse_of: :auto_canceled_by
@@ -605,6 +605,12 @@ module Ci
::Gitlab::Ci::PipelineObjectHierarchy.new(relation, options: options)
end
+ def self.use_partition_id_filter?
+ ::Gitlab::SafeRequestStore.fetch(:ci_builds_partition_id_query_filter) do
+ ::Feature.enabled?(:ci_builds_partition_id_query_filter)
+ end
+ end
+
def uses_needs?
processables.where(scheduling_type: :dag).any?
end
diff --git a/app/models/ci/stage.rb b/app/models/ci/stage.rb
index 3d2df9a45ef..e413ed8a668 100644
--- a/app/models/ci/stage.rb
+++ b/app/models/ci/stage.rb
@@ -21,19 +21,45 @@ module Ci
belongs_to :project
belongs_to :pipeline
- has_many :statuses, class_name: 'CommitStatus', foreign_key: :stage_id, inverse_of: :ci_stage
- has_many :latest_statuses, -> { ordered.latest },
+ has_many :statuses,
+ ->(stage) { in_partition(stage) },
class_name: 'CommitStatus',
foreign_key: :stage_id,
+ partition_foreign_key: :partition_id,
inverse_of: :ci_stage
- has_many :retried_statuses, -> { ordered.retried },
+ has_many :latest_statuses,
+ ->(stage) { in_partition(stage).ordered.latest },
class_name: 'CommitStatus',
foreign_key: :stage_id,
+ partition_foreign_key: :partition_id,
+ inverse_of: :ci_stage
+ has_many :retried_statuses,
+ ->(stage) { in_partition(stage).ordered.retried },
+ class_name: 'CommitStatus',
+ foreign_key: :stage_id,
+ partition_foreign_key: :partition_id,
+ inverse_of: :ci_stage
+ has_many :processables,
+ ->(stage) { in_partition(stage) },
+ class_name: 'Ci::Processable',
+ foreign_key: :stage_id,
+ partition_foreign_key: :partition_id,
+ inverse_of: :ci_stage
+ has_many :builds,
+ ->(stage) { in_partition(stage) },
+ foreign_key: :stage_id,
+ partition_foreign_key: :partition_id,
+ inverse_of: :ci_stage
+ has_many :bridges,
+ ->(stage) { in_partition(stage) },
+ foreign_key: :stage_id,
+ partition_foreign_key: :partition_id,
+ inverse_of: :ci_stage
+ has_many :generic_commit_statuses,
+ ->(stage) { in_partition(stage) },
+ foreign_key: :stage_id,
+ partition_foreign_key: :partition_id,
inverse_of: :ci_stage
- has_many :processables, class_name: 'Ci::Processable', foreign_key: :stage_id, inverse_of: :ci_stage
- has_many :builds, foreign_key: :stage_id, inverse_of: :ci_stage
- has_many :bridges, foreign_key: :stage_id, inverse_of: :ci_stage
- has_many :generic_commit_statuses, foreign_key: :stage_id, inverse_of: :ci_stage
scope :ordered, -> { order(position: :asc) }
scope :in_pipelines, ->(pipelines) { where(pipeline: pipelines) }
@@ -107,6 +133,10 @@ module Ci
end
end
+ def self.use_partition_id_filter?
+ Ci::Pipeline.use_partition_id_filter?
+ end
+
def set_status(new_status)
retry_optimistic_lock(self, name: 'ci_stage_set_status') do
case new_status
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 9f77bd8ebe2..a8e2615b327 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -25,11 +25,12 @@ class CommitStatus < Ci::ApplicationRecord
self.sequence_name = :ci_builds_id_seq
self.primary_key = :id
+ query_constraints :id, :partition_id
partitionable scope: :pipeline, partitioned: true
belongs_to :user
belongs_to :project
- belongs_to :pipeline, class_name: 'Ci::Pipeline', foreign_key: :commit_id, inverse_of: :statuses
+ belongs_to :pipeline, ->(build) { in_partition(build) }, class_name: 'Ci::Pipeline', foreign_key: :commit_id, inverse_of: :statuses, partition_foreign_key: :partition_id
belongs_to :auto_canceled_by, class_name: 'Ci::Pipeline', inverse_of: :auto_canceled_jobs
belongs_to :ci_stage, class_name: 'Ci::Stage', foreign_key: :stage_id
@@ -233,6 +234,10 @@ class CommitStatus < Ci::ApplicationRecord
false
end
+ def self.use_partition_id_filter?
+ Ci::Pipeline.use_partition_id_filter?
+ end
+
def locking_enabled?
will_save_change_to_status?
end
diff --git a/app/models/concerns/ci/metadatable.rb b/app/models/concerns/ci/metadatable.rb
index b785e39523d..5dcae7d594d 100644
--- a/app/models/concerns/ci/metadatable.rb
+++ b/app/models/concerns/ci/metadatable.rb
@@ -10,8 +10,10 @@ module Ci
included do
has_one :metadata,
+ ->(build) { where(partition_id: build.partition_id) },
class_name: 'Ci::BuildMetadata',
foreign_key: :build_id,
+ partition_foreign_key: :partition_id,
inverse_of: :build,
autosave: true
diff --git a/app/models/concerns/ci/partitionable.rb b/app/models/concerns/ci/partitionable.rb
index aaf07bfee3a..447603c1635 100644
--- a/app/models/concerns/ci/partitionable.rb
+++ b/app/models/concerns/ci/partitionable.rb
@@ -61,6 +61,10 @@ module Ci
before_validation :set_partition_id, on: :create
validates :partition_id, presence: true
+ scope :in_partition, ->(id) do
+ where(partition_id: (id.respond_to?(:partition_id) ? id.partition_id : id))
+ end
+
def set_partition_id
return if partition_id_changed? && partition_id.present?
return unless partition_scope_value
diff --git a/app/models/release.rb b/app/models/release.rb
index 6830f6e8480..f8a7973e451 100644
--- a/app/models/release.rb
+++ b/app/models/release.rb
@@ -25,6 +25,9 @@ class Release < ApplicationRecord
accepts_nested_attributes_for :links, allow_destroy: true
before_create :set_released_at
+ # TODO: Remove this callback after catalog_resource.released_at is denormalized. See https://gitlab.com/gitlab-org/gitlab/-/issues/430117.
+ after_update :update_catalog_resource, if: -> { project.catalog_resource && saved_change_to_released_at? }
+ after_destroy :update_catalog_resource, if: -> { project.catalog_resource }
validates :project, :tag, presence: true
validates :author_id, presence: true, on: :create
@@ -168,6 +171,10 @@ class Release < ApplicationRecord
order_created_desc
end
end
+
+ def update_catalog_resource
+ project.catalog_resource.update_latest_released_at!
+ end
end
Release.prepend_mod_with('Release')
diff --git a/app/services/packages/debian/extract_metadata_service.rb b/app/services/packages/debian/extract_metadata_service.rb
index cc9defd2e73..91a4a0d67c8 100644
--- a/app/services/packages/debian/extract_metadata_service.rb
+++ b/app/services/packages/debian/extract_metadata_service.rb
@@ -26,9 +26,7 @@ module Packages
attr_reader :package_file
def valid_package_file?
- package_file &&
- package_file.package&.debian? &&
- package_file.file.size > 0 # rubocop:disable Style/ZeroLengthPredicate
+ package_file && package_file.package&.debian? && !package_file.file.empty_size?
end
def file_type_basic
diff --git a/app/services/packages/helm/extract_file_metadata_service.rb b/app/services/packages/helm/extract_file_metadata_service.rb
index 77efa65f1d1..5cd1acc57dd 100644
--- a/app/services/packages/helm/extract_file_metadata_service.rb
+++ b/app/services/packages/helm/extract_file_metadata_service.rb
@@ -24,9 +24,7 @@ module Packages
private
def valid_package_file?
- @package_file &&
- @package_file.package&.helm? &&
- @package_file.file.size > 0 # rubocop:disable Style/ZeroLengthPredicate
+ @package_file && @package_file.package&.helm? && !@package_file.file.empty_size?
end
def metadata
diff --git a/app/services/packages/nuget/process_package_file_service.rb b/app/services/packages/nuget/process_package_file_service.rb
index 99b59bd3322..acec926dc48 100644
--- a/app/services/packages/nuget/process_package_file_service.rb
+++ b/app/services/packages/nuget/process_package_file_service.rb
@@ -22,9 +22,7 @@ module Packages
attr_reader :package_file
def valid_package_file?
- package_file &&
- package_file.package&.nuget? &&
- package_file.file.size > 0 # rubocop:disable Style/ZeroLengthPredicate
+ package_file && package_file.package&.nuget? && !package_file.file.empty_size?
end
def with_zip_file(&block)
diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb
index b5f6bff756b..250a4046cce 100644
--- a/app/services/quick_actions/interpret_service.rb
+++ b/app/services/quick_actions/interpret_service.rb
@@ -42,7 +42,7 @@ module QuickActions
@updates = {}
@execution_message = {}
- content, commands = extractor.extract_commands(content, only: only)
+ content, commands = extractor.extract_commands(content, only: only, target: quick_action_target)
extract_updates(commands)
[content, @updates, execution_messages_for(commands), command_names(commands)]
@@ -56,7 +56,7 @@ module QuickActions
@quick_action_target = quick_action_target
- content, commands = extractor(keep_actions).extract_commands(content)
+ content, commands = extractor(keep_actions).extract_commands(content, target: quick_action_target)
commands = explain_commands(commands)
[content, commands]
end
diff --git a/app/uploaders/gitlab_uploader.rb b/app/uploaders/gitlab_uploader.rb
index c1ca535b336..6e8906645d8 100644
--- a/app/uploaders/gitlab_uploader.rb
+++ b/app/uploaders/gitlab_uploader.rb
@@ -76,6 +76,10 @@ class GitlabUploader < CarrierWave::Uploader::Base
file.present?
end
+ def empty_size?
+ size == 0
+ end
+
def cache_dir
File.join(root, base_dir, 'tmp/cache')
end