From eb3a23aaaa99ef8ae08c7b440fad676e3c71a1af Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 28 Sep 2022 12:07:50 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/rules.gitlab-ci.yml | 2 +- .../layout/first_hash_element_indentation.yml | 2 - .rubocop_todo/layout/line_length.yml | 2 - .rubocop_todo/style/word_array.yml | 8 - app/assets/javascripts/api/projects_api.js | 8 + .../stores/modules/batch_comments/getters.js | 19 +- .../diffs/components/diff_row_utils.js | 6 +- .../diffs/components/diff_view.vue | 18 +- .../diffs/mixins/draft_comments.js | 2 +- .../components/transfer_project_form.vue | 170 +++++++---- .../current_user_namespace.query.graphql | 9 + ...e_user_can_transfer_projects.query.graphql | 24 -- .../settings/init_transfer_project_form.js | 2 + .../protected_branch_create.js | 2 +- .../set_status_modal/set_status_form.vue | 4 +- .../color_select_root.vue | 6 +- .../filtered_search_bar_root.vue | 4 +- .../store/modules/filters/actions.js | 10 +- .../tokens/author_token.vue | 4 +- .../tokens/branch_token.vue | 4 +- .../tokens/crm_contact_token.vue | 4 +- .../tokens/crm_organization_token.vue | 4 +- .../tokens/emoji_token.vue | 4 +- .../tokens/label_token.vue | 4 +- .../tokens/milestone_token.vue | 4 +- .../tokens/release_token.vue | 4 +- .../namespace_select/namespace_select.vue | 14 +- .../stylesheets/_page_specific_files.scss | 1 - app/assets/stylesheets/framework/diffs.scss | 4 + app/assets/stylesheets/framework/flash.scss | 13 + .../stylesheets/pages/environment_logs.scss | 54 ---- .../projects/pages_domains_controller.rb | 11 +- app/controllers/users_controller.rb | 2 +- .../pages_domain_updated_event.rb | 18 ++ app/helpers/application_helper.rb | 1 - app/helpers/users/callouts_helper.rb | 4 +- app/models/concerns/counter_attribute.rb | 51 +++- app/models/project_statistics.rb | 48 ++-- .../projects/build_artifacts_size_refresh.rb | 4 +- app/services/pages_domains/update_service.rb | 34 +++ ...ernal_authorization_service_form.html.haml | 2 +- .../_import_export_limits.html.haml | 4 +- .../application_settings/_ip_limits.html.haml | 2 +- .../_pipeline_limits.html.haml | 2 +- .../application_settings/_registry.html.haml | 2 +- .../admin/background_jobs/show.html.haml | 3 +- app/views/layouts/_flash.html.haml | 5 +- app/views/layouts/fullscreen.html.haml | 2 +- app/views/projects/_transfer.html.haml | 2 +- app/views/projects/buttons/_star.html.haml | 14 +- app/views/projects/edit.html.haml | 2 +- app/views/projects/hooks/edit.html.haml | 2 +- .../shared/_create_protected_branch.html.haml | 4 +- .../shared/access_tokens/_form.html.haml | 2 +- .../deploy_keys/_project_group_form.html.haml | 2 +- .../counter_attribute_db_lease_for_update.yml | 8 + ...y_orchestration_policy_configuration_id.rb | 58 ++++ ...y_orchestration_policy_configuration_id.rb | 38 +++ db/schema_migrations/20220907115806 | 1 + db/schema_migrations/20220907122648 | 1 + db/structure.sql | 14 +- doc/development/pipelines.md | 2 +- doc/integration/auth0.md | 46 ++- .../dependency_scanning/index.md | 7 + doc/user/packages/rubygems_registry/index.md | 2 +- lib/api/pages_domains.rb | 4 +- lib/gitlab/auth_logger.rb | 2 + ...quest_rules_with_security_orchestration.rb | 15 + ...oject_rules_with_security_orchestration.rb | 15 + .../DAST-Default-Branch-Deploy.gitlab-ci.yml | 2 +- .../ci/templates/Jobs/Deploy.gitlab-ci.yml | 2 +- .../Jobs/Deploy.latest.gitlab-ci.yml | 2 +- .../external_database_checker.rb | 25 +- locale/gitlab.pot | 15 +- .../settings/mirroring_repositories.rb | 2 +- .../projects/pages_domains_controller_spec.rb | 32 +++ .../merge_request/batch_comments_spec.rb | 18 ++ spec/features/protected_branches_spec.rb | 2 +- spec/frontend/api/projects_api_spec.js | 23 ++ .../diffs/components/diff_content_spec.js | 2 +- .../diffs/components/diff_row_spec.js | 2 +- .../diffs/components/diff_row_utils_spec.js | 6 +- .../diffs/components/diff_view_spec.js | 16 +- .../diffs/mock_data/diff_code_quality.js | 6 +- spec/frontend/fixtures/namespaces.rb | 57 ++-- .../components/transfer_project_form_spec.js | 269 ++++++++++++------ .../color_select_root_spec.js | 6 +- .../store/modules/filters/actions_spec.js | 16 +- .../tokens/author_token_spec.js | 6 +- .../tokens/branch_token_spec.js | 6 +- .../tokens/crm_contact_token_spec.js | 14 +- .../tokens/crm_organization_token_spec.js | 14 +- .../tokens/emoji_token_spec.js | 6 +- .../tokens/label_token_spec.js | 6 +- .../tokens/milestone_token_spec.js | 6 +- .../tokens/release_token_spec.js | 4 +- .../namespace_select/namespace_select_spec.js | 14 +- .../external_database_checker_spec.rb | 103 +++++-- spec/models/project_statistics_spec.rb | 24 +- spec/requests/api/pages_domains_spec.rb | 40 ++- .../pages_domains/update_service_spec.rb | 61 ++++ .../helpers/exclusive_lease_helpers.rb | 19 ++ .../counter_attribute_shared_examples.rb | 87 +++++- spec/views/layouts/_flash.html.haml_spec.rb | 21 +- .../layouts/fullscreen.html.haml_spec.rb | 7 + 105 files changed, 1244 insertions(+), 549 deletions(-) delete mode 100644 .rubocop_todo/style/word_array.yml create mode 100644 app/assets/javascripts/projects/settings/graphql/queries/current_user_namespace.query.graphql delete mode 100644 app/assets/javascripts/projects/settings/graphql/queries/search_namespaces_where_user_can_transfer_projects.query.graphql delete mode 100644 app/assets/stylesheets/pages/environment_logs.scss create mode 100644 app/events/pages_domains/pages_domain_updated_event.rb create mode 100644 app/services/pages_domains/update_service.rb create mode 100644 config/feature_flags/development/counter_attribute_db_lease_for_update.yml create mode 100644 db/migrate/20220907115806_add_security_orchestration_policy_configuration_id.rb create mode 100644 db/post_migrate/20220907122648_populate_security_orchestration_policy_configuration_id.rb create mode 100644 db/schema_migrations/20220907115806 create mode 100644 db/schema_migrations/20220907122648 create mode 100644 lib/gitlab/background_migration/populate_approval_merge_request_rules_with_security_orchestration.rb create mode 100644 lib/gitlab/background_migration/populate_approval_project_rules_with_security_orchestration.rb create mode 100644 spec/services/pages_domains/update_service_spec.rb diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index e2bf3e02eea..6c1a135573b 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -532,7 +532,7 @@ - "vendor/assets/javascripts/**/*" .feature-flag-development-config-patterns: &feature-flag-development-config-patterns - - "{,ee/}config/feature_flags/{development,ops}/*.yml" + - "{,ee/,jh/}config/feature_flags/{development,ops}/*.yml" ################## # Conditions set # diff --git a/.rubocop_todo/layout/first_hash_element_indentation.yml b/.rubocop_todo/layout/first_hash_element_indentation.yml index 94ad3fde252..e6525456ee5 100644 --- a/.rubocop_todo/layout/first_hash_element_indentation.yml +++ b/.rubocop_todo/layout/first_hash_element_indentation.yml @@ -308,7 +308,6 @@ Layout/FirstHashElementIndentation: - 'lib/gitlab/asciidoc/include_processor.rb' - 'lib/gitlab/auth/otp/strategies/forti_token_cloud.rb' - 'lib/gitlab/ci/config/entry/processable.rb' - - 'lib/gitlab/config_checker/external_database_checker.rb' - 'lib/gitlab/database/query_analyzers/gitlab_schemas_metrics.rb' - 'lib/gitlab/database/query_analyzers/prevent_cross_database_modification.rb' - 'lib/gitlab/github_import/importer/diff_note_importer.rb' @@ -471,7 +470,6 @@ Layout/FirstHashElementIndentation: - 'spec/lib/gitlab/ci/reports/security/scanner_spec.rb' - 'spec/lib/gitlab/ci/reports/terraform_reports_spec.rb' - 'spec/lib/gitlab/ci/yaml_processor_spec.rb' - - 'spec/lib/gitlab/config_checker/external_database_checker_spec.rb' - 'spec/lib/gitlab/config_checker/puma_rugged_checker_spec.rb' - 'spec/lib/gitlab/data_builder/build_spec.rb' - 'spec/lib/gitlab/data_builder/issuable_spec.rb' diff --git a/.rubocop_todo/layout/line_length.yml b/.rubocop_todo/layout/line_length.yml index dd018402310..9748ac81070 100644 --- a/.rubocop_todo/layout/line_length.yml +++ b/.rubocop_todo/layout/line_length.yml @@ -3176,7 +3176,6 @@ Layout/LineLength: - 'lib/gitlab/composer/version_index.rb' - 'lib/gitlab/config/entry/configurable.rb' - 'lib/gitlab/config/entry/validators.rb' - - 'lib/gitlab/config_checker/external_database_checker.rb' - 'lib/gitlab/conflict/file.rb' - 'lib/gitlab/conflict/file_collection.rb' - 'lib/gitlab/content_security_policy/config_loader.rb' @@ -4524,7 +4523,6 @@ Layout/LineLength: - 'spec/lib/gitlab/code_navigation_path_spec.rb' - 'spec/lib/gitlab/composer/cache_spec.rb' - 'spec/lib/gitlab/composer/version_index_spec.rb' - - 'spec/lib/gitlab/config_checker/external_database_checker_spec.rb' - 'spec/lib/gitlab/config_checker/puma_rugged_checker_spec.rb' - 'spec/lib/gitlab/conflict/file_spec.rb' - 'spec/lib/gitlab/consul/internal_spec.rb' diff --git a/.rubocop_todo/style/word_array.yml b/.rubocop_todo/style/word_array.yml deleted file mode 100644 index 7e8122bf9d9..00000000000 --- a/.rubocop_todo/style/word_array.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -# Cop supports --auto-correct. -Style/WordArray: - Exclude: - - 'ee/spec/features/protected_branches_spec.rb' - - 'qa/qa/page/project/settings/mirroring_repositories.rb' - - 'qa/qa/specs/features/ee/browser_ui/13_secure/enable_scanning_from_configuration_spec.rb' - - 'spec/features/protected_branches_spec.rb' diff --git a/app/assets/javascripts/api/projects_api.js b/app/assets/javascripts/api/projects_api.js index 667aa878261..5b5abbdf50b 100644 --- a/app/assets/javascripts/api/projects_api.js +++ b/app/assets/javascripts/api/projects_api.js @@ -5,6 +5,7 @@ import { buildApiUrl } from './api_utils'; const PROJECTS_PATH = '/api/:version/projects.json'; const PROJECT_IMPORT_MEMBERS_PATH = '/api/:version/projects/:id/import_project_members/:project_id'; const PROJECT_REPOSITORY_SIZE_PATH = '/api/:version/projects/:id/repository_size'; +const PROJECT_TRANSFER_LOCATIONS_PATH = 'api/:version/projects/:id/transfer_locations'; export function getProjects(query, options, callback = () => {}) { const url = buildApiUrl(PROJECTS_PATH); @@ -42,3 +43,10 @@ export function updateRepositorySize(projectPath) { ); return axios.post(url); } + +export const getTransferLocations = (projectId, params = {}) => { + const url = buildApiUrl(PROJECT_TRANSFER_LOCATIONS_PATH).replace(':id', projectId); + const defaultParams = { per_page: DEFAULT_PER_PAGE }; + + return axios.get(url, { params: { ...defaultParams, ...params } }); +}; diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js index df5214ea7ab..75e4ae63c18 100644 --- a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js +++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js @@ -22,7 +22,11 @@ export const draftsPerFileHashAndLine = (state) => acc[draft.file_hash] = {}; } - acc[draft.file_hash][draft.line_code] = draft; + if (!acc[draft.file_hash][draft.line_code]) { + acc[draft.file_hash][draft.line_code] = []; + } + + acc[draft.file_hash][draft.line_code].push(draft); } return acc; @@ -61,18 +65,15 @@ export const shouldRenderDraftRowInDiscussion = (state, getters) => (discussionI export const draftForDiscussion = (state, getters) => (discussionId) => getters.draftsPerDiscussionId[discussionId] || {}; -export const draftForLine = (state, getters) => (diffFileSha, line, side = null) => { +export const draftsForLine = (state, getters) => (diffFileSha, line, side = null) => { const draftsForFile = getters.draftsPerFileHashAndLine[diffFileSha]; - const key = side !== null ? parallelLineKey(line, side) : line.line_code; + const showDraftsForThisSide = showDraftOnSide(line, side); - if (draftsForFile) { - const draft = draftsForFile[key]; - if (draft && showDraftOnSide(line, side)) { - return draft; - } + if (showDraftsForThisSide && draftsForFile?.[key]) { + return draftsForFile[key]; } - return {}; + return []; }; export const draftsForFile = (state) => (diffFileSha) => diff --git a/app/assets/javascripts/diffs/components/diff_row_utils.js b/app/assets/javascripts/diffs/components/diff_row_utils.js index f610ac979ca..7732badde34 100644 --- a/app/assets/javascripts/diffs/components/diff_row_utils.js +++ b/app/assets/javascripts/diffs/components/diff_row_utils.js @@ -108,7 +108,7 @@ export const mapParallel = (content) => (line) => { ...left, renderDiscussion: hasExpandedDiscussionOnLeft, hasDraft: content.hasParallelDraftLeft(content.diffFile.file_hash, line), - lineDraft: content.draftForLine(content.diffFile.file_hash, line, 'left'), + lineDrafts: content.draftsForLine(content.diffFile.file_hash, line, 'left'), hasCommentForm: left.hasForm, isConflictMarker: line.left.type === CONFLICT_MARKER_OUR || line.left.type === CONFLICT_MARKER_THEIR, @@ -123,7 +123,7 @@ export const mapParallel = (content) => (line) => { hasExpandedDiscussionOnRight && right.type && right.type !== EXPANDED_LINE_TYPE, ), hasDraft: content.hasParallelDraftRight(content.diffFile.file_hash, line), - lineDraft: content.draftForLine(content.diffFile.file_hash, line, 'right'), + lineDrafts: content.draftsForLine(content.diffFile.file_hash, line, 'right'), hasCommentForm: Boolean(right.hasForm && right.type && right.type !== EXPANDED_LINE_TYPE), emptyCellClassMap: { conflict_their: line.left?.type === CONFLICT_OUR }, addCommentTooltip: addCommentTooltip(line.right), @@ -145,7 +145,7 @@ export const mapParallel = (content) => (line) => { lineCode: lineCode(line), isMetaLineLeft: isMetaLine(left?.type), isMetaLineRight: isMetaLine(right?.type), - draftRowClasses: left?.lineDraft > 0 || right?.lineDraft > 0 ? '' : 'js-temp-notes-holder', + draftRowClasses: left?.hasDraft || right?.hasDraft ? '' : 'js-temp-notes-holder', renderCommentRow, commentRowClasses: hasDiscussions(left) || hasDiscussions(right) ? '' : 'js-temp-notes-holder', }; diff --git a/app/assets/javascripts/diffs/components/diff_view.vue b/app/assets/javascripts/diffs/components/diff_view.vue index 91bf3283379..5ea118afe78 100644 --- a/app/assets/javascripts/diffs/components/diff_view.vue +++ b/app/assets/javascripts/diffs/components/diff_view.vue @@ -177,6 +177,12 @@ export default { getCodeQualityLine(line) { return (line.left ?? line.right)?.codequality?.[0]?.line; }, + lineDrafts(line, side) { + return (line[side]?.lineDrafts || []).filter((entry) => entry.isDraft); + }, + lineHasDrafts(line, side) { + return this.lineDrafts(line, side).length > 0; + }, }, userColorScheme: window.gon.user_color_scheme, }; @@ -297,19 +303,19 @@ export default { class="diff-grid-drafts diff-tr notes_holder" >
-
- +
+
-
- +
+
diff --git a/app/assets/javascripts/diffs/mixins/draft_comments.js b/app/assets/javascripts/diffs/mixins/draft_comments.js index 693b4a84694..d41bb160e96 100644 --- a/app/assets/javascripts/diffs/mixins/draft_comments.js +++ b/app/assets/javascripts/diffs/mixins/draft_comments.js @@ -5,7 +5,7 @@ export default { ...mapGetters('batchComments', [ 'shouldRenderDraftRow', 'shouldRenderParallelDraftRow', - 'draftForLine', + 'draftsForLine', 'draftsForFile', 'hasParallelDraftLeft', 'hasParallelDraftRight', diff --git a/app/assets/javascripts/projects/settings/components/transfer_project_form.vue b/app/assets/javascripts/projects/settings/components/transfer_project_form.vue index c13753da00b..8299efed0a4 100644 --- a/app/assets/javascripts/projects/settings/components/transfer_project_form.vue +++ b/app/assets/javascripts/projects/settings/components/transfer_project_form.vue @@ -1,13 +1,14 @@