Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
036de62f73
commit
d3a97bfbd2
|
|
@ -2767,30 +2767,17 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'app/helpers/events_helper.rb'
|
||||
- 'app/helpers/labels_helper.rb'
|
||||
- 'app/policies/project_policy.rb'
|
||||
- 'app/views/groups/issues.html.haml'
|
||||
- 'app/views/groups/merge_requests.html.haml'
|
||||
- 'app/views/shared/boards/_switcher.html.haml'
|
||||
- 'ee/app/controllers/concerns/description_diff_actions.rb'
|
||||
- 'ee/app/controllers/concerns/ee/boards_actions.rb'
|
||||
- 'ee/app/controllers/concerns/security_dashboards_permissions.rb'
|
||||
- 'ee/app/controllers/ee/boards/lists_controller.rb'
|
||||
- 'ee/app/controllers/ee/groups/application_controller.rb'
|
||||
- 'ee/app/controllers/ee/groups/group_members_controller.rb'
|
||||
- 'ee/app/controllers/ee/projects/autocomplete_sources_controller.rb'
|
||||
- 'ee/app/controllers/ee/projects/issues_controller.rb'
|
||||
- 'ee/app/controllers/ee/projects/security/configuration_controller.rb'
|
||||
- 'ee/app/controllers/ee/projects/settings/ci_cd_controller.rb'
|
||||
- 'ee/app/controllers/ee/projects/settings/operations_controller.rb'
|
||||
- 'ee/app/controllers/ee/projects/settings/repository_controller.rb'
|
||||
- 'ee/app/controllers/groups/analytics/application_controller.rb'
|
||||
- 'ee/app/controllers/groups/audit_events_controller.rb'
|
||||
- 'ee/app/controllers/groups/bulk_update_controller.rb'
|
||||
- 'ee/app/controllers/groups/contribution_analytics_controller.rb'
|
||||
- 'ee/app/controllers/groups/epics_controller.rb'
|
||||
- 'ee/app/controllers/groups/hooks_controller.rb'
|
||||
- 'ee/app/controllers/groups/issues_analytics_controller.rb'
|
||||
- 'ee/app/controllers/groups/iterations_controller.rb'
|
||||
- 'ee/app/controllers/projects/analytics/issues_analytics_controller.rb'
|
||||
- 'ee/app/controllers/projects/audit_events_controller.rb'
|
||||
- 'ee/app/controllers/projects/cluster_agents_controller.rb'
|
||||
- 'ee/app/controllers/projects/iterations/inherited_controller.rb'
|
||||
|
|
@ -2801,23 +2788,18 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'ee/app/finders/clusters/agents_finder.rb'
|
||||
- 'ee/app/finders/ee/alert_management/alerts_finder.rb'
|
||||
- 'ee/app/finders/ee/alert_management/http_integrations_finder.rb'
|
||||
- 'ee/app/finders/ee/group_projects_finder.rb'
|
||||
- 'ee/app/graphql/ee/types/group_type.rb'
|
||||
- 'ee/app/graphql/mutations/dast/profiles/create.rb'
|
||||
- 'ee/app/graphql/mutations/dast/profiles/run.rb'
|
||||
- 'ee/app/graphql/mutations/dast/profiles/update.rb'
|
||||
- 'ee/app/graphql/mutations/instance_security_dashboard/remove_project.rb'
|
||||
- 'ee/app/graphql/resolvers/boards/epic_boards_resolver.rb'
|
||||
- 'ee/app/graphql/resolvers/clusters/agent_tokens_resolver.rb'
|
||||
- 'ee/app/graphql/resolvers/epics_resolver.rb'
|
||||
- 'ee/app/helpers/ee/analytics/navbar_helper.rb'
|
||||
- 'ee/app/helpers/ee/application_helper.rb'
|
||||
- 'ee/app/helpers/ee/boards_helper.rb'
|
||||
- 'ee/app/helpers/ee/clusters_helper.rb'
|
||||
- 'ee/app/helpers/ee/dashboard_helper.rb'
|
||||
- 'ee/app/helpers/ee/form_helper.rb'
|
||||
- 'ee/app/helpers/ee/graph_helper.rb'
|
||||
- 'ee/app/helpers/ee/groups_helper.rb'
|
||||
- 'ee/app/helpers/ee/issues_helper.rb'
|
||||
- 'ee/app/helpers/ee/lock_helper.rb'
|
||||
- 'ee/app/helpers/ee/operations_helper.rb'
|
||||
|
|
@ -2826,7 +2808,6 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'ee/app/helpers/ee/releases_helper.rb'
|
||||
- 'ee/app/helpers/ee/search_helper.rb'
|
||||
- 'ee/app/helpers/ee/tree_helper.rb'
|
||||
- 'ee/app/helpers/groups/security_features_helper.rb'
|
||||
- 'ee/app/models/approval_state.rb'
|
||||
- 'ee/app/models/concerns/approvable.rb'
|
||||
- 'ee/app/models/concerns/ee/project_security_scanners_information.rb'
|
||||
|
|
@ -2849,15 +2830,12 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'ee/app/models/ee/project_ci_cd_setting.rb'
|
||||
- 'ee/app/models/namespace_statistics.rb'
|
||||
- 'ee/app/models/project_security_setting.rb'
|
||||
- 'ee/app/models/saml_provider.rb'
|
||||
- 'ee/app/policies/compliance_management/framework_policy.rb'
|
||||
- 'ee/app/policies/compliance_management/framework_policy.rb'
|
||||
- 'ee/app/policies/ee/group_policy.rb'
|
||||
- 'ee/app/policies/ee/namespace_policy.rb'
|
||||
- 'ee/app/policies/ee/project_policy.rb'
|
||||
- 'ee/app/policies/ee/protected_branch_policy.rb'
|
||||
- 'ee/app/presenters/ee/label_presenter.rb'
|
||||
- 'ee/app/presenters/epic_presenter.rb'
|
||||
- 'ee/app/presenters/merge_request_approver_presenter.rb'
|
||||
- 'ee/app/serializers/dashboard_operations_project_entity.rb'
|
||||
- 'ee/app/serializers/ee/environment_entity.rb'
|
||||
|
|
@ -2881,7 +2859,6 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'ee/app/services/ee/boards/issues/list_service.rb'
|
||||
- 'ee/app/services/ee/boards/lists/create_service.rb'
|
||||
- 'ee/app/services/ee/boards/update_service.rb'
|
||||
- 'ee/app/services/ee/groups/create_service.rb'
|
||||
- 'ee/app/services/ee/ide/schemas_config_service.rb'
|
||||
- 'ee/app/services/ee/issuable_base_service.rb'
|
||||
- 'ee/app/services/ee/issue_links/create_service.rb'
|
||||
|
|
@ -2896,9 +2873,6 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'ee/app/services/ee/projects/create_service.rb'
|
||||
- 'ee/app/services/ee/protected_branches/create_service.rb'
|
||||
- 'ee/app/services/ee/releases/create_evidence_service.rb'
|
||||
- 'ee/app/services/ee/search/group_service.rb'
|
||||
- 'ee/app/services/iterations/cadences/create_service.rb'
|
||||
- 'ee/app/services/iterations/cadences/update_service.rb'
|
||||
- 'ee/app/services/iterations/create_service.rb'
|
||||
- 'ee/app/services/iterations/update_service.rb'
|
||||
- 'ee/app/services/merge_requests/sync_report_approver_approval_rules.rb'
|
||||
|
|
@ -2907,16 +2881,6 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'ee/app/services/quality_management/test_cases/create_service.rb'
|
||||
- 'ee/app/services/requirements_management/process_test_reports_service.rb'
|
||||
- 'ee/app/services/security/store_scans_service.rb'
|
||||
- 'ee/app/views/groups/_templates_setting.html.haml'
|
||||
- 'ee/app/views/groups/contribution_analytics/show.html.haml'
|
||||
- 'ee/app/views/groups/ee/_settings_nav.html.haml'
|
||||
- 'ee/app/views/groups/epics/index.html.haml'
|
||||
- 'ee/app/views/groups/epics/show.html.haml'
|
||||
- 'ee/app/views/groups/epics/show.html.haml'
|
||||
- 'ee/app/views/groups/hooks/index.html.haml'
|
||||
- 'ee/app/views/groups/roadmap/show.html.haml'
|
||||
- 'ee/app/views/groups/settings/_allowed_email_domain.html.haml'
|
||||
- 'ee/app/views/groups/settings/_ip_restriction.html.haml'
|
||||
- 'ee/app/views/layouts/nav/_test_cases_link.html.haml'
|
||||
- 'ee/app/views/layouts/nav/sidebar/_project_iterations_link.html.haml'
|
||||
- 'ee/app/views/projects/_merge_request_approvals_settings.html.haml'
|
||||
|
|
@ -2950,7 +2914,6 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'ee/app/views/shared/issuable/_board_create_list_dropdown.html.haml'
|
||||
- 'ee/app/views/shared/issuable/_board_create_list_dropdown.html.haml'
|
||||
- 'ee/app/views/shared/issuable/_group_bulk_update_sidebar.html.haml'
|
||||
- 'ee/app/views/shared/issuable/_iteration_select.html.haml'
|
||||
- 'ee/app/views/shared/issuable/form/_default_templates.html.haml'
|
||||
- 'ee/app/views/shared/labels/_create_label_help_text.html.haml'
|
||||
- 'ee/app/views/shared/promotions/_promote_mr_features.html.haml'
|
||||
|
|
@ -2964,14 +2927,10 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'ee/app/workers/analytics/code_review_metrics_worker.rb'
|
||||
- 'ee/app/workers/group_saml_group_sync_worker.rb'
|
||||
- 'ee/lib/api/external_approval_rules.rb'
|
||||
- 'ee/lib/api/helpers/epics_helpers.rb'
|
||||
- 'ee/lib/api/ldap_group_links.rb'
|
||||
- 'ee/lib/ee/api/entities/approval_state.rb'
|
||||
- 'ee/lib/ee/api/entities/board.rb'
|
||||
- 'ee/lib/ee/api/entities/group.rb'
|
||||
- 'ee/lib/ee/api/entities/issue.rb'
|
||||
- 'ee/lib/ee/api/entities/project.rb'
|
||||
- 'ee/lib/ee/api/groups.rb'
|
||||
- 'ee/lib/ee/api/helpers.rb'
|
||||
- 'ee/lib/ee/api/internal/kubernetes.rb'
|
||||
- 'ee/lib/ee/api/job_artifacts.rb'
|
||||
|
|
@ -2981,14 +2940,11 @@ Gitlab/FeatureAvailableUsage:
|
|||
- 'ee/lib/ee/gitlab/gon_helper.rb'
|
||||
- 'ee/lib/ee/gitlab/tree_summary.rb'
|
||||
- 'ee/lib/gitlab/alert_management.rb'
|
||||
- 'ee/lib/gitlab/auth/group_saml/group_lookup.rb'
|
||||
- 'ee/lib/gitlab/ci/pipeline/chain/config/content/compliance.rb'
|
||||
- 'ee/lib/gitlab/code_owners.rb'
|
||||
- 'ee/lib/gitlab/import_export/group/group_and_descendants_repo_restorer.rb'
|
||||
- 'ee/lib/gitlab/incident_management.rb'
|
||||
- 'ee/lib/gitlab/path_locks_finder.rb'
|
||||
- 'ee/lib/incident_management/incident_sla.rb'
|
||||
- 'ee/spec/models/ee/namespace_spec.rb'
|
||||
- 'ee/spec/models/instance_security_dashboard_spec.rb'
|
||||
- 'ee/spec/models/license_spec.rb'
|
||||
- 'ee/spec/models/project_spec.rb'
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ export default class DropdownOperator extends FilteredSearchDropdown {
|
|||
];
|
||||
const dropdownToken = this.tokenKeys.searchByKey(dropdownName.toLowerCase());
|
||||
|
||||
if (gon.features?.notIssuableQueries && !dropdownToken?.hideNotEqual) {
|
||||
if (!dropdownToken?.hideNotEqual) {
|
||||
dropdownData.push({
|
||||
tag: 'not-equal',
|
||||
type: 'string',
|
||||
|
|
|
|||
|
|
@ -1,25 +1,35 @@
|
|||
import Vue from 'vue';
|
||||
import VueApollo from 'vue-apollo';
|
||||
import PipelineTourSuccessModal from '~/blob/pipeline_tour_success_modal.vue';
|
||||
import BlobViewer from '~/blob/viewer/index';
|
||||
import GpgBadges from '~/gpg_badges';
|
||||
import createDefaultClient from '~/lib/graphql';
|
||||
import initBlob from '~/pages/projects/init_blob';
|
||||
import initWebIdeLink from '~/pages/projects/shared/web_ide_link';
|
||||
import commitPipelineStatus from '~/projects/tree/components/commit_pipeline_status_component.vue';
|
||||
import BlobContentViewer from '~/repository/components/blob_content_viewer.vue';
|
||||
import '~/sourcegraph/load';
|
||||
|
||||
Vue.use(VueApollo);
|
||||
|
||||
const apolloProvider = new VueApollo({
|
||||
defaultClient: createDefaultClient(),
|
||||
});
|
||||
|
||||
const viewBlobEl = document.querySelector('#js-view-blob-app');
|
||||
|
||||
if (viewBlobEl) {
|
||||
const { blobPath } = viewBlobEl.dataset;
|
||||
const { blobPath, projectPath } = viewBlobEl.dataset;
|
||||
|
||||
// eslint-disable-next-line no-new
|
||||
new Vue({
|
||||
el: viewBlobEl,
|
||||
apolloProvider,
|
||||
render(createElement) {
|
||||
return createElement(BlobContentViewer, {
|
||||
props: {
|
||||
path: blobPath,
|
||||
projectPath,
|
||||
},
|
||||
});
|
||||
},
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import BlobHeader from '~/blob/components/blob_header.vue';
|
|||
import createFlash from '~/flash';
|
||||
import { __ } from '~/locale';
|
||||
import blobInfoQuery from '../queries/blob_info.query.graphql';
|
||||
import projectPathQuery from '../queries/project_path.query.graphql';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
|
@ -15,10 +14,7 @@ export default {
|
|||
GlLoadingIcon,
|
||||
},
|
||||
apollo: {
|
||||
projectPath: {
|
||||
query: projectPathQuery,
|
||||
},
|
||||
blobInfo: {
|
||||
project: {
|
||||
query: blobInfoQuery,
|
||||
variables() {
|
||||
return {
|
||||
|
|
@ -41,41 +37,58 @@ export default {
|
|||
type: String,
|
||||
required: true,
|
||||
},
|
||||
projectPath: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
projectPath: '',
|
||||
blobInfo: {
|
||||
name: '',
|
||||
size: '',
|
||||
rawBlob: '',
|
||||
type: '',
|
||||
fileType: '',
|
||||
tooLarge: false,
|
||||
path: '',
|
||||
editBlobPath: '',
|
||||
ideEditPath: '',
|
||||
storedExternally: false,
|
||||
rawPath: '',
|
||||
externalStorageUrl: '',
|
||||
replacePath: '',
|
||||
deletePath: '',
|
||||
canLock: false,
|
||||
isLocked: false,
|
||||
lockLink: '',
|
||||
canModifyBlob: true,
|
||||
forkPath: '',
|
||||
simpleViewer: '',
|
||||
richViewer: '',
|
||||
project: {
|
||||
repository: {
|
||||
blobs: {
|
||||
nodes: [
|
||||
{
|
||||
name: '',
|
||||
size: '',
|
||||
rawTextBlob: '',
|
||||
type: '',
|
||||
fileType: '',
|
||||
tooLarge: false,
|
||||
path: '',
|
||||
editBlobPath: '',
|
||||
ideEditPath: '',
|
||||
storedExternally: false,
|
||||
rawPath: '',
|
||||
externalStorageUrl: '',
|
||||
replacePath: '',
|
||||
deletePath: '',
|
||||
canLock: false,
|
||||
isLocked: false,
|
||||
lockLink: '',
|
||||
canModifyBlob: true,
|
||||
forkPath: '',
|
||||
simpleViewer: {},
|
||||
richViewer: {},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
isLoading() {
|
||||
return this.$apollo.queries.blobInfo.loading;
|
||||
return this.$apollo.queries.project.loading;
|
||||
},
|
||||
blobInfo() {
|
||||
const nodes = this.project?.repository?.blobs?.nodes;
|
||||
|
||||
return nodes[0] || {};
|
||||
},
|
||||
viewer() {
|
||||
const { fileType, tooLarge, type } = this.blobInfo;
|
||||
const viewer = this.blobInfo.richViewer || this.blobInfo.simpleViewer;
|
||||
const { fileType, tooLarge, type } = viewer;
|
||||
|
||||
return { fileType, tooLarge, type };
|
||||
},
|
||||
|
|
@ -90,7 +103,7 @@ export default {
|
|||
<blob-header :blob="blobInfo" />
|
||||
<blob-content
|
||||
:blob="blobInfo"
|
||||
:content="blobInfo.rawBlob"
|
||||
:content="blobInfo.rawTextBlob"
|
||||
:is-raw-content="true"
|
||||
:active-viewer="viewer"
|
||||
:loading="false"
|
||||
|
|
|
|||
|
|
@ -13,10 +13,14 @@ export default {
|
|||
type: String,
|
||||
required: true,
|
||||
},
|
||||
projectPath: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<blob-content-viewer :path="path" />
|
||||
<blob-content-viewer :path="path" :project-path="projectPath" />
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -11,15 +11,19 @@ query getBlobInfo($projectPath: ID!, $filePath: String!) {
|
|||
fileType
|
||||
path
|
||||
editBlobPath
|
||||
ideEditPath
|
||||
storedExternally
|
||||
rawPath
|
||||
externalStorageUrl
|
||||
replacePath
|
||||
canModifyBlob
|
||||
forkPath
|
||||
simpleViewer
|
||||
richViewer
|
||||
simpleViewer {
|
||||
fileType
|
||||
tooLarge
|
||||
type
|
||||
}
|
||||
richViewer {
|
||||
fileType
|
||||
tooLarge
|
||||
type
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ export default function createRouter(base, baseRef) {
|
|||
component: BlobPage,
|
||||
props: (route) => ({
|
||||
path: route.params.path,
|
||||
projectPath: base,
|
||||
}),
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@ module BoardsActions
|
|||
before_action :boards, only: :index
|
||||
before_action :board, only: :show
|
||||
before_action :push_licensed_features, only: [:index, :show]
|
||||
before_action do
|
||||
push_frontend_feature_flag(:not_issuable_queries, parent, default_enabled: true)
|
||||
end
|
||||
end
|
||||
|
||||
def index
|
||||
|
|
|
|||
|
|
@ -8,9 +8,6 @@ module IssuableActions
|
|||
before_action :authorize_destroy_issuable!, only: :destroy
|
||||
before_action :check_destroy_confirmation!, only: :destroy
|
||||
before_action :authorize_admin_issuable!, only: :bulk_update
|
||||
before_action do
|
||||
push_frontend_feature_flag(:not_issuable_queries, @project, default_enabled: true)
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
|
|
|
|||
|
|
@ -32,10 +32,6 @@ module IssuableCollectionsAction
|
|||
|
||||
private
|
||||
|
||||
def set_not_query_feature_flag(object = nil)
|
||||
push_frontend_feature_flag(:not_issuable_queries, object, default_enabled: true)
|
||||
end
|
||||
|
||||
def sorting_field
|
||||
case action_name
|
||||
when 'issues'
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ class DashboardController < Dashboard::ApplicationController
|
|||
before_action :projects, only: [:issues, :merge_requests]
|
||||
before_action :set_show_full_reference, only: [:issues, :merge_requests]
|
||||
before_action :check_filters_presence!, only: [:issues, :merge_requests]
|
||||
before_action :set_not_query_feature_flag
|
||||
|
||||
respond_to :html
|
||||
|
||||
|
|
|
|||
|
|
@ -35,10 +35,6 @@ class GroupsController < Groups::ApplicationController
|
|||
push_frontend_feature_flag(:vue_issuables_list, @group)
|
||||
end
|
||||
|
||||
before_action do
|
||||
set_not_query_feature_flag(@group)
|
||||
end
|
||||
|
||||
before_action :export_rate_limit, only: [:export, :download_export]
|
||||
|
||||
helper_method :captcha_required?
|
||||
|
|
|
|||
|
|
@ -142,8 +142,6 @@ class IssuableFinder
|
|||
end
|
||||
|
||||
def should_filter_negated_args?
|
||||
return false unless not_filters_enabled?
|
||||
|
||||
# API endpoints send in `nil` values so we test if there are any non-nil
|
||||
not_params.present? && not_params.values.any?
|
||||
end
|
||||
|
|
@ -370,8 +368,7 @@ class IssuableFinder
|
|||
Issuables::AuthorFilter.new(
|
||||
items,
|
||||
params: original_params,
|
||||
or_filters_enabled: or_filters_enabled?,
|
||||
not_filters_enabled: not_filters_enabled?
|
||||
or_filters_enabled: or_filters_enabled?
|
||||
).filter
|
||||
end
|
||||
|
||||
|
|
@ -496,12 +493,6 @@ class IssuableFinder
|
|||
end
|
||||
end
|
||||
|
||||
def not_filters_enabled?
|
||||
strong_memoize(:not_filters_enabled) do
|
||||
Feature.enabled?(:not_issuable_queries, feature_flag_scope, default_enabled: :yaml)
|
||||
end
|
||||
end
|
||||
|
||||
def feature_flag_scope
|
||||
params.group || params.project
|
||||
end
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ module Issuables
|
|||
end
|
||||
|
||||
def by_negated_author(issuables)
|
||||
return issuables unless not_filters_enabled? && not_params.present?
|
||||
return issuables unless not_params.present?
|
||||
|
||||
if not_params[:author_id].present?
|
||||
issuables.not_authored(not_params[:author_id])
|
||||
|
|
|
|||
|
|
@ -4,11 +4,10 @@ module Issuables
|
|||
class BaseFilter
|
||||
attr_reader :issuables, :params
|
||||
|
||||
def initialize(issuables, params:, or_filters_enabled: false, not_filters_enabled: false)
|
||||
def initialize(issuables, params:, or_filters_enabled: false)
|
||||
@issuables = issuables
|
||||
@params = params
|
||||
@or_filters_enabled = or_filters_enabled
|
||||
@not_filters_enabled = not_filters_enabled
|
||||
end
|
||||
|
||||
def filter
|
||||
|
|
@ -28,9 +27,5 @@ module Issuables
|
|||
def or_filters_enabled?
|
||||
@or_filters_enabled
|
||||
end
|
||||
|
||||
def not_filters_enabled?
|
||||
@not_filters_enabled
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
- @can_bulk_update = can?(current_user, :admin_issue, @group) && @group.feature_available?(:group_bulk_edit)
|
||||
- @can_bulk_update = can?(current_user, :admin_issue, @group) && @group.licensed_feature_available?(:group_bulk_edit)
|
||||
|
||||
- page_title _("Issues")
|
||||
- add_page_specific_style 'page_bundles/issues_list'
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
- @can_bulk_update = can?(current_user, :admin_merge_request, @group) && @group.feature_available?(:group_bulk_edit)
|
||||
- @can_bulk_update = can?(current_user, :admin_merge_request, @group) && @group.licensed_feature_available?(:group_bulk_edit)
|
||||
|
||||
- page_title _("Merge requests")
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
- if @code_navigation_path
|
||||
#js-code-navigation{ data: { code_navigation_path: @code_navigation_path, blob_path: blob.path, definition_path_prefix: project_blob_path(@project, @ref) } }
|
||||
- if Feature.enabled?(:refactor_blob_viewer, @project, default_enabled: :yaml)
|
||||
#js-view-blob-app{ data: { blob_path: blob.path } }
|
||||
#js-view-blob-app{ data: { blob_path: blob.path, project_path: @project.full_path } }
|
||||
.gl-spinner-container
|
||||
= loading_icon(size: 'md')
|
||||
- else
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Remove not_issuable_queries feature flag
|
||||
merge_request: 60321
|
||||
author:
|
||||
type: other
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
name: not_issuable_queries
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27639
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/292809
|
||||
milestone: '13.0'
|
||||
type: development
|
||||
group: group::project management
|
||||
default_enabled: true
|
||||
|
|
@ -4,5 +4,4 @@ filenames:
|
|||
- ee/app/assets/javascripts/security_configuration/api_fuzzing/graphql/api_fuzzing_ci_configuration.query.graphql
|
||||
- ee/app/assets/javascripts/security_configuration/api_fuzzing/graphql/create_api_fuzzing_configuration.mutation.graphql
|
||||
- ee/app/assets/javascripts/security_configuration/dast_profiles/graphql/dast_failed_site_validations.query.graphql
|
||||
- app/assets/javascripts/repository/queries/blob_info.query.graphql
|
||||
- ee/app/assets/javascripts/security_configuration/graphql/configure_dependency_scanning.mutation.graphql
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/30213) in GitLab 12.1.
|
||||
|
||||
Similar to [project-level](../user/project/clusters/index.md) and
|
||||
Similarly to [project-level](../user/project/clusters/index.md) and
|
||||
[instance-level](../user/instance/clusters/index.md) Kubernetes clusters,
|
||||
group-level Kubernetes clusters allow you to connect a Kubernetes cluster to
|
||||
your group, enabling you to use the same cluster across multiple projects.
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ Since the implementation of
|
|||
[GitLab CE features to work with unlicensed EE instance](https://gitlab.com/gitlab-org/gitlab/-/issues/2500)
|
||||
GitLab Enterprise Edition should work like GitLab Community Edition
|
||||
when no license is active. So EE features always should be guarded by
|
||||
`project.feature_available?` or `group.feature_available?` (or
|
||||
`project.feature_available?` or `group.licensed_feature_available?` (or
|
||||
`License.feature_available?` if it is a system-wide feature).
|
||||
|
||||
Frontend features should be guarded by pushing a flag from the backend by [using `push_licensed_feature`](licensed_feature_availability.md#restricting-frontend-features), and checked using `this.glFeatures.someFeature` in the frontend.
|
||||
|
|
|
|||
|
|
@ -119,46 +119,21 @@ RSpec.describe 'Project issue boards', :js do
|
|||
end
|
||||
|
||||
context 'search list negation queries' do
|
||||
context 'with the NOT queries feature flag disabled' do
|
||||
before do
|
||||
stub_feature_flags(not_issuable_queries: false)
|
||||
|
||||
visit_project_board_path_without_query_limit(project, board)
|
||||
end
|
||||
|
||||
it 'does not have the != option' do
|
||||
find('.filtered-search').set('label:')
|
||||
|
||||
wait_for_requests
|
||||
within('#js-dropdown-operator') do
|
||||
tokens = all(:css, 'li.filter-dropdown-item')
|
||||
expect(tokens.count).to eq(1)
|
||||
button = tokens[0].find('button')
|
||||
expect(button).to have_content('=')
|
||||
expect(button).not_to have_content('!=')
|
||||
end
|
||||
end
|
||||
before do
|
||||
visit_project_board_path_without_query_limit(project, board)
|
||||
end
|
||||
|
||||
context 'with the NOT queries feature flag enabled' do
|
||||
before do
|
||||
stub_feature_flags(not_issuable_queries: true)
|
||||
it 'does not have the != option' do
|
||||
find('.filtered-search').set('label:')
|
||||
|
||||
visit_project_board_path_without_query_limit(project, board)
|
||||
end
|
||||
|
||||
it 'does not have the != option' do
|
||||
find('.filtered-search').set('label:')
|
||||
|
||||
wait_for_requests
|
||||
within('#js-dropdown-operator') do
|
||||
tokens = all(:css, 'li.filter-dropdown-item')
|
||||
expect(tokens.count).to eq(2)
|
||||
button = tokens[0].find('button')
|
||||
expect(button).to have_content('=')
|
||||
button = tokens[1].find('button')
|
||||
expect(button).to have_content('!=')
|
||||
end
|
||||
wait_for_requests
|
||||
within('#js-dropdown-operator') do
|
||||
tokens = all(:css, 'li.filter-dropdown-item')
|
||||
expect(tokens.count).to eq(2)
|
||||
button = tokens[0].find('button')
|
||||
expect(button).to have_content('=')
|
||||
button = tokens[1].find('button')
|
||||
expect(button).to have_content('!=')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -79,26 +79,6 @@ RSpec.describe 'Filter issues', :js do
|
|||
expect_filtered_search_input(search_term)
|
||||
end
|
||||
|
||||
context 'with the NOT queries feature flag disabled' do
|
||||
before do
|
||||
stub_feature_flags(not_issuable_queries: false)
|
||||
visit project_issues_path(project)
|
||||
end
|
||||
|
||||
it 'does not have the != option' do
|
||||
input_filtered_search("label:", submit: false, extra_space: false)
|
||||
|
||||
wait_for_requests
|
||||
within('#js-dropdown-operator') do
|
||||
tokens = all(:css, 'li.filter-dropdown-item')
|
||||
expect(tokens.count).to eq(1)
|
||||
button = tokens[0].find('button')
|
||||
expect(button).to have_content('=')
|
||||
expect(button).not_to have_content('!=')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'filter issues by author' do
|
||||
context 'only author' do
|
||||
it 'filters issues by searched author' do
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ let wrapper;
|
|||
const mockData = {
|
||||
name: 'some_file.js',
|
||||
size: 123,
|
||||
rawBlob: 'raw content',
|
||||
rawTextBlob: 'raw content',
|
||||
type: 'text',
|
||||
fileType: 'text',
|
||||
tooLarge: false,
|
||||
|
|
@ -25,19 +25,24 @@ const mockData = {
|
|||
lockLink: 'some_file.js/lock',
|
||||
canModifyBlob: true,
|
||||
forkPath: 'some_file.js/fork',
|
||||
simpleViewer: {},
|
||||
richViewer: {},
|
||||
simpleViewer: {
|
||||
fileType: 'text',
|
||||
tooLarge: false,
|
||||
type: 'simple',
|
||||
},
|
||||
richViewer: null,
|
||||
};
|
||||
|
||||
function factory(path, loading = false) {
|
||||
wrapper = shallowMount(BlobContentViewer, {
|
||||
propsData: {
|
||||
path,
|
||||
projectPath: 'some/path',
|
||||
},
|
||||
mocks: {
|
||||
$apollo: {
|
||||
queries: {
|
||||
blobInfo: {
|
||||
project: {
|
||||
loading,
|
||||
},
|
||||
},
|
||||
|
|
@ -80,7 +85,7 @@ describe('Blob content viewer component', () => {
|
|||
expect(findBlobContent().props('activeViewer')).toEqual({
|
||||
fileType: 'text',
|
||||
tooLarge: false,
|
||||
type: 'text',
|
||||
type: 'simple',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ describe('Repository blob page component', () => {
|
|||
const path = 'file.js';
|
||||
|
||||
beforeEach(() => {
|
||||
wrapper = shallowMount(BlobPage, { propsData: { path } });
|
||||
wrapper = shallowMount(BlobPage, { propsData: { path, projectPath: 'some/path' } });
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue