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
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-12-09 06:15:10 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-12-09 06:15:10 +0300
commitdc149736154b6f3a244573f299fa0d6283399ec1 (patch)
tree42c0b51e74b28263e0b8d1bf1ec0af9340a39db4
parent60c4a86ee6faf8209d3896eec65860dd8b69563c (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.rubocop_todo/database/avoid_using_pluck_without_limit.yml328
-rw-r--r--app/controllers/projects_controller.rb8
-rw-r--r--app/services/projects/create_service.rb7
-rw-r--r--doc/development/documentation/styleguide/word_list.md12
-rw-r--r--spec/services/projects/create_service_spec.rb2
-rw-r--r--spec/support/rspec_run_time.rb65
6 files changed, 246 insertions, 176 deletions
diff --git a/.rubocop_todo/database/avoid_using_pluck_without_limit.yml b/.rubocop_todo/database/avoid_using_pluck_without_limit.yml
index 254dc429c89..5318a6194a4 100644
--- a/.rubocop_todo/database/avoid_using_pluck_without_limit.yml
+++ b/.rubocop_todo/database/avoid_using_pluck_without_limit.yml
@@ -2,166 +2,168 @@
Database/AvoidUsingPluckWithoutLimit:
Details: grace period
Exclude:
- - app/finders/groups/projects_requiring_authorizations_refresh/base.rb
- - app/finders/issuables/label_filter.rb
- - app/finders/projects/members/effective_access_level_finder.rb
- - app/models/application_record.rb
- - app/models/ci/build.rb
- - app/models/ci/build_trace_chunks/fog.rb
- - app/models/ci/build_trace_chunks/redis_base.rb
- - app/models/ci/group_variable.rb
- - app/models/ci/job_artifact.rb
- - app/models/ci/job_token/allowlist.rb
- - app/models/ci/pipeline.rb
- - app/models/ci/runner.rb
- - app/models/ci/runner_manager_build.rb
- - app/models/commit_collection.rb
- - app/models/commit_signatures/gpg_signature.rb
- - app/models/commit_status.rb
- - app/models/concerns/cascading_namespace_setting_attribute.rb
- - app/models/concerns/commit_signature.rb
- - app/models/concerns/integrations/reset_secret_fields.rb
- - app/models/concerns/issuable.rb
- - app/models/concerns/packages/debian/distribution.rb
- - app/models/concerns/subquery.rb
- - app/models/concerns/taggable_queries.rb
- - app/models/customer_relations/contact.rb
- - app/models/customer_relations/issue_contact.rb
- - app/models/environment.rb
- - app/models/event_collection.rb
- - app/models/group.rb
- - app/models/incident_management/timeline_event_tag.rb
- - app/models/integration.rb
- - app/models/integrations/base_chat_notification.rb
- - app/models/integrations/slack_workspace/api_scope.rb
- - app/models/integrations/slack_workspace/integration_api_scope.rb
- - app/models/issue.rb
- - app/models/label.rb
- - app/models/loose_foreign_keys/deleted_record.rb
- - app/models/member.rb
- - app/models/members/last_group_owner_assigner.rb
- - app/models/merge_request.rb
- - app/models/merge_request_diff.rb
- - app/models/merge_requests_closing_issues.rb
- - app/models/namespace.rb
- - app/models/namespaces/traversal/linear.rb
- - app/models/namespaces/traversal/recursive.rb
- - app/models/note.rb
- - app/models/packages/build_info.rb
- - app/models/packages/dependency.rb
- - app/models/packages/maven/metadatum.rb
- - app/models/packages/package.rb
- - app/models/pages_deployment.rb
- - app/models/postgresql/replication_slot.rb
- - app/models/project.rb
- - app/models/project_authorizations/changes.rb
- - app/models/project_team.rb
- - app/models/prometheus_alert.rb
- - app/models/protected_branch.rb
- - app/models/remote_mirror.rb
- - app/models/shard.rb
- - app/models/slack_integration.rb
- - app/models/todo.rb
- - app/models/uploads/fog.rb
- - app/models/user.rb
- - app/models/users/group_visit.rb
- - app/models/users/project_visit.rb
- - app/models/x509_certificate.rb
- - app/services/authorized_project_update/project_recalculate_service.rb
- - app/services/boards/base_items_list_service.rb
- - app/services/branches/delete_merged_service.rb
- - app/services/bulk_imports/batched_relation_export_service.rb
- - app/services/ci/job_artifacts/bulk_delete_by_project_service.rb
- - app/services/ci/pipeline_creation/cancel_redundant_pipelines_service.rb
- - app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb
- - app/services/ci/queue/pending_builds_strategy.rb
- - app/services/ci/refs/enqueue_pipelines_to_unlock_service.rb
- - app/services/ci/runners/reconcile_existing_runner_versions_service.rb
- - app/services/ci/unlock_pipeline_service.rb
- - app/services/groups/autocomplete_service.rb
- - app/services/groups/destroy_service.rb
- - app/services/groups/transfer_service.rb
- - app/services/issues/referenced_merge_requests_service.rb
- - app/services/labels/available_labels_service.rb
- - app/services/labels/promote_service.rb
- - app/services/labels/transfer_service.rb
- - app/services/merge_requests/push_options_handler_service.rb
- - app/services/merge_requests/pushed_branches_service.rb
- - app/services/packages/cleanup/execute_policy_service.rb
- - app/services/projects/slack_application_install_service.rb
- - app/services/projects/unlink_fork_service.rb
- - ee/app/finders/ee/issuables/label_filter.rb
- - ee/app/finders/ee/merge_requests_finder.rb
- - ee/app/finders/groups_with_templates_finder.rb
- - ee/app/finders/namespaces/billed_users_finder.rb
- - ee/app/finders/namespaces/free_user_cap/users_finder.rb
- - ee/app/finders/namespaces/free_user_cap/users_without_added_members_finder.rb
- - ee/app/models/ai/ai_resource/concerns/noteable.rb
- - ee/app/models/allowed_email_domain.rb
- - ee/app/models/analytics/issues_analytics.rb
- - ee/app/models/approval_wrapped_rule.rb
- - ee/app/models/concerns/audit_events/streaming/streamable_event_type_filter.rb
- - ee/app/models/concerns/ee/ci/artifactable.rb
- - ee/app/models/concerns/ee/issuable_link.rb
- - ee/app/models/concerns/elasticsearch_indexed_container.rb
- - ee/app/models/concerns/geo/verifiable_model.rb
- - ee/app/models/dast_scanner_profile.rb
- - ee/app/models/dast_site_profile.rb
- - ee/app/models/ee/ci/daily_build_group_report_result.rb
- - ee/app/models/ee/ci/pipeline.rb
- - ee/app/models/ee/design_management/repository.rb
- - ee/app/models/ee/epic.rb
- - ee/app/models/ee/group.rb
- - ee/app/models/ee/group_group_link.rb
- - ee/app/models/ee/group_member.rb
- - ee/app/models/ee/label.rb
- - ee/app/models/ee/merge_request.rb
- - ee/app/models/ee/personal_access_token.rb
- - ee/app/models/ee/project.rb
- - ee/app/models/ee/project_authorization.rb
- - ee/app/models/ee/project_group_link.rb
- - ee/app/models/ee/projects/wiki_repository.rb
- - ee/app/models/ee/uploads/local.rb
- - ee/app/models/ee/user.rb
- - ee/app/models/embedding/application_record.rb
- - ee/app/models/geo/base_registry.rb
- - ee/app/models/geo/container_repository_registry.rb
- - ee/app/models/geo/lfs_object_registry.rb
- - ee/app/models/geo/tracking_base.rb
- - ee/app/models/geo/upload_registry.rb
- - ee/app/models/gitlab_subscriptions/user_add_on_assignment.rb
- - ee/app/models/incident_management/oncall_rotation.rb
- - ee/app/models/instance_security_dashboard.rb
- - ee/app/models/issuables_analytics.rb
- - ee/app/models/iteration.rb
- - ee/app/models/merge_requests/external_status_check.rb
- - ee/app/models/protected_environment.rb
- - ee/app/models/security/finding.rb
- - ee/app/models/security/scan.rb
- - ee/app/models/security/scan_result_policy_violation.rb
- - ee/app/models/software_license.rb
- - ee/app/models/vulnerabilities/finding.rb
- - ee/app/models/vulnerabilities/read.rb
- - ee/app/services/analytics/cycle_analytics/consistency_check_service.rb
- - ee/app/services/analytics/cycle_analytics/data_loader_service.rb
- - ee/app/services/approval_rules/params_filtering_service.rb
- - ee/app/services/click_house/data_ingestion/ci_finished_builds_sync_service.rb
- - ee/app/services/ee/groups/destroy_service.rb
- - ee/app/services/ee/search/global_service.rb
- - ee/app/services/epics/update_dates_service.rb
- - ee/app/services/gitlab_subscriptions/preview_billable_user_change_service.rb
- - ee/app/services/security/merge_request_security_report_generation_service.rb
- - ee/app/services/security/scan_result_policies/sync_any_merge_request_rules_service.rb
- - ee/app/services/security/scan_result_policies/update_approvals_service.rb
- - ee/app/services/security/security_orchestration_policies/default_branch_updation_check_service.rb
- - ee/app/services/security/security_orchestration_policies/fetch_policy_approvers_service.rb
- - ee/app/services/security/security_orchestration_policies/policy_branches_service.rb
- - ee/app/services/security/security_orchestration_policies/process_scan_result_policy_service.rb
- - ee/app/services/security/security_orchestration_policies/protected_branches_deletion_check_service.rb
- - ee/app/services/security/security_orchestration_policies/protected_branches_push_service.rb
- - ee/app/services/security/security_orchestration_policies/rule_schedule_service.rb
- - ee/app/services/security/security_orchestration_policies/validate_policy_service.rb
- - ee/app/services/security/sync_license_scanning_rules_service.rb
- - ee/app/services/vulnerabilities/bulk_dismiss_service.rb
- - ee/app/services/vulnerability_exports/export_service.rb
- - ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb
+ - 'app/finders/groups/projects_requiring_authorizations_refresh/base.rb'
+ - 'app/finders/issuables/label_filter.rb'
+ - 'app/finders/projects/members/effective_access_level_finder.rb'
+ - 'app/models/application_record.rb'
+ - 'app/models/ci/build.rb'
+ - 'app/models/ci/build_trace_chunks/fog.rb'
+ - 'app/models/ci/build_trace_chunks/redis_base.rb'
+ - 'app/models/ci/group_variable.rb'
+ - 'app/models/ci/job_artifact.rb'
+ - 'app/models/ci/job_token/allowlist.rb'
+ - 'app/models/ci/pipeline.rb'
+ - 'app/models/ci/runner.rb'
+ - 'app/models/ci/runner_manager_build.rb'
+ - 'app/models/commit_collection.rb'
+ - 'app/models/commit_signatures/gpg_signature.rb'
+ - 'app/models/commit_status.rb'
+ - 'app/models/concerns/cascading_namespace_setting_attribute.rb'
+ - 'app/models/concerns/commit_signature.rb'
+ - 'app/models/concerns/integrations/reset_secret_fields.rb'
+ - 'app/models/concerns/issuable.rb'
+ - 'app/models/concerns/packages/debian/distribution.rb'
+ - 'app/models/concerns/routable.rb'
+ - 'app/models/concerns/subquery.rb'
+ - 'app/models/concerns/taggable_queries.rb'
+ - 'app/models/customer_relations/contact.rb'
+ - 'app/models/customer_relations/issue_contact.rb'
+ - 'app/models/environment.rb'
+ - 'app/models/event_collection.rb'
+ - 'app/models/group.rb'
+ - 'app/models/incident_management/timeline_event_tag.rb'
+ - 'app/models/integration.rb'
+ - 'app/models/integrations/base_chat_notification.rb'
+ - 'app/models/integrations/slack_workspace/api_scope.rb'
+ - 'app/models/integrations/slack_workspace/integration_api_scope.rb'
+ - 'app/models/issue.rb'
+ - 'app/models/label.rb'
+ - 'app/models/loose_foreign_keys/deleted_record.rb'
+ - 'app/models/member.rb'
+ - 'app/models/members/last_group_owner_assigner.rb'
+ - 'app/models/merge_request.rb'
+ - 'app/models/merge_request_diff.rb'
+ - 'app/models/merge_requests_closing_issues.rb'
+ - 'app/models/namespace.rb'
+ - 'app/models/namespaces/traversal/linear.rb'
+ - 'app/models/namespaces/traversal/recursive.rb'
+ - 'app/models/note.rb'
+ - 'app/models/packages/build_info.rb'
+ - 'app/models/packages/dependency.rb'
+ - 'app/models/packages/maven/metadatum.rb'
+ - 'app/models/packages/package.rb'
+ - 'app/models/pages_deployment.rb'
+ - 'app/models/postgresql/replication_slot.rb'
+ - 'app/models/project.rb'
+ - 'app/models/project_authorizations/changes.rb'
+ - 'app/models/project_team.rb'
+ - 'app/models/prometheus_alert.rb'
+ - 'app/models/protected_branch.rb'
+ - 'app/models/remote_mirror.rb'
+ - 'app/models/shard.rb'
+ - 'app/models/slack_integration.rb'
+ - 'app/models/todo.rb'
+ - 'app/models/uploads/fog.rb'
+ - 'app/models/user.rb'
+ - 'app/models/users/group_visit.rb'
+ - 'app/models/users/project_visit.rb'
+ - 'app/models/x509_certificate.rb'
+ - 'app/services/authorized_project_update/project_recalculate_service.rb'
+ - 'app/services/boards/base_items_list_service.rb'
+ - 'app/services/branches/delete_merged_service.rb'
+ - 'app/services/bulk_imports/batched_relation_export_service.rb'
+ - 'app/services/ci/job_artifacts/bulk_delete_by_project_service.rb'
+ - 'app/services/ci/pipeline_creation/cancel_redundant_pipelines_service.rb'
+ - 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb'
+ - 'app/services/ci/queue/pending_builds_strategy.rb'
+ - 'app/services/ci/refs/enqueue_pipelines_to_unlock_service.rb'
+ - 'app/services/ci/runners/reconcile_existing_runner_versions_service.rb'
+ - 'app/services/ci/unlock_pipeline_service.rb'
+ - 'app/services/groups/autocomplete_service.rb'
+ - 'app/services/groups/destroy_service.rb'
+ - 'app/services/groups/transfer_service.rb'
+ - 'app/services/issues/referenced_merge_requests_service.rb'
+ - 'app/services/labels/available_labels_service.rb'
+ - 'app/services/labels/promote_service.rb'
+ - 'app/services/labels/transfer_service.rb'
+ - 'app/services/merge_requests/push_options_handler_service.rb'
+ - 'app/services/merge_requests/pushed_branches_service.rb'
+ - 'app/services/packages/cleanup/execute_policy_service.rb'
+ - 'app/services/projects/slack_application_install_service.rb'
+ - 'app/services/projects/unlink_fork_service.rb'
+ - 'ee/app/finders/ee/issuables/label_filter.rb'
+ - 'ee/app/finders/ee/merge_requests_finder.rb'
+ - 'ee/app/finders/groups_with_templates_finder.rb'
+ - 'ee/app/finders/namespaces/billed_users_finder.rb'
+ - 'ee/app/finders/namespaces/free_user_cap/users_finder.rb'
+ - 'ee/app/finders/namespaces/free_user_cap/users_without_added_members_finder.rb'
+ - 'ee/app/models/ai/ai_resource/concerns/noteable.rb'
+ - 'ee/app/models/allowed_email_domain.rb'
+ - 'ee/app/models/analytics/issues_analytics.rb'
+ - 'ee/app/models/approval_wrapped_rule.rb'
+ - 'ee/app/models/concerns/audit_events/streaming/streamable_event_type_filter.rb'
+ - 'ee/app/models/concerns/ee/ci/artifactable.rb'
+ - 'ee/app/models/concerns/ee/issuable_link.rb'
+ - 'ee/app/models/concerns/elasticsearch_indexed_container.rb'
+ - 'ee/app/models/concerns/geo/verifiable_model.rb'
+ - 'ee/app/models/dast_scanner_profile.rb'
+ - 'ee/app/models/dast_site_profile.rb'
+ - 'ee/app/models/ee/ci/daily_build_group_report_result.rb'
+ - 'ee/app/models/ee/ci/pipeline.rb'
+ - 'ee/app/models/ee/design_management/repository.rb'
+ - 'ee/app/models/ee/epic.rb'
+ - 'ee/app/models/ee/group.rb'
+ - 'ee/app/models/ee/group_group_link.rb'
+ - 'ee/app/models/ee/group_member.rb'
+ - 'ee/app/models/ee/label.rb'
+ - 'ee/app/models/ee/merge_request.rb'
+ - 'ee/app/models/ee/personal_access_token.rb'
+ - 'ee/app/models/ee/project.rb'
+ - 'ee/app/models/ee/project_authorization.rb'
+ - 'ee/app/models/ee/project_group_link.rb'
+ - 'ee/app/models/ee/projects/wiki_repository.rb'
+ - 'ee/app/models/ee/uploads/local.rb'
+ - 'ee/app/models/ee/user.rb'
+ - 'ee/app/models/embedding/application_record.rb'
+ - 'ee/app/models/geo/base_registry.rb'
+ - 'ee/app/models/geo/container_repository_registry.rb'
+ - 'ee/app/models/geo/lfs_object_registry.rb'
+ - 'ee/app/models/geo/tracking_base.rb'
+ - 'ee/app/models/geo/upload_registry.rb'
+ - 'ee/app/models/gitlab_subscriptions/add_on_purchase.rb'
+ - 'ee/app/models/gitlab_subscriptions/user_add_on_assignment.rb'
+ - 'ee/app/models/incident_management/oncall_rotation.rb'
+ - 'ee/app/models/instance_security_dashboard.rb'
+ - 'ee/app/models/issuables_analytics.rb'
+ - 'ee/app/models/iteration.rb'
+ - 'ee/app/models/merge_requests/external_status_check.rb'
+ - 'ee/app/models/protected_environment.rb'
+ - 'ee/app/models/security/finding.rb'
+ - 'ee/app/models/security/scan.rb'
+ - 'ee/app/models/security/scan_result_policy_violation.rb'
+ - 'ee/app/models/software_license.rb'
+ - 'ee/app/models/vulnerabilities/finding.rb'
+ - 'ee/app/models/vulnerabilities/read.rb'
+ - 'ee/app/services/analytics/cycle_analytics/consistency_check_service.rb'
+ - 'ee/app/services/analytics/cycle_analytics/data_loader_service.rb'
+ - 'ee/app/services/approval_rules/params_filtering_service.rb'
+ - 'ee/app/services/click_house/data_ingestion/ci_finished_builds_sync_service.rb'
+ - 'ee/app/services/ee/groups/destroy_service.rb'
+ - 'ee/app/services/ee/search/global_service.rb'
+ - 'ee/app/services/epics/update_dates_service.rb'
+ - 'ee/app/services/gitlab_subscriptions/preview_billable_user_change_service.rb'
+ - 'ee/app/services/security/merge_request_security_report_generation_service.rb'
+ - 'ee/app/services/security/scan_result_policies/sync_any_merge_request_rules_service.rb'
+ - 'ee/app/services/security/scan_result_policies/update_approvals_service.rb'
+ - 'ee/app/services/security/security_orchestration_policies/default_branch_updation_check_service.rb'
+ - 'ee/app/services/security/security_orchestration_policies/fetch_policy_approvers_service.rb'
+ - 'ee/app/services/security/security_orchestration_policies/policy_branches_service.rb'
+ - 'ee/app/services/security/security_orchestration_policies/process_scan_result_policy_service.rb'
+ - 'ee/app/services/security/security_orchestration_policies/protected_branches_deletion_check_service.rb'
+ - 'ee/app/services/security/security_orchestration_policies/protected_branches_push_service.rb'
+ - 'ee/app/services/security/security_orchestration_policies/rule_schedule_service.rb'
+ - 'ee/app/services/security/security_orchestration_policies/validate_policy_service.rb'
+ - 'ee/app/services/security/sync_license_scanning_rules_service.rb'
+ - 'ee/app/services/vulnerabilities/bulk_dismiss_service.rb'
+ - 'ee/app/services/vulnerability_exports/export_service.rb'
+ - 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 12decbbfeee..6428e0196a8 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -443,6 +443,7 @@ class ProjectsController < Projects::ApplicationController
params.require(:project)
.permit(project_params_attributes + attributes)
.merge(import_url_params)
+ .merge(object_format_params)
end
def project_feature_attributes
@@ -513,7 +514,6 @@ class ProjectsController < Projects::ApplicationController
:merge_method,
:initialize_with_sast,
:initialize_with_readme,
- :use_sha256_repository,
:ci_separated_caches,
:suggestion_commit_message,
:packages_enabled,
@@ -532,6 +532,12 @@ class ProjectsController < Projects::ApplicationController
{}
end
+ def object_format_params
+ return {} unless Gitlab::Utils.to_boolean(params.dig(:project, :use_sha256_repository))
+
+ { repository_object_format: Repository::FORMAT_SHA256 }
+ end
+
def active_new_project_tab
project_params[:import_url].present? ? 'import' : 'blank'
end
diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb
index e4b0fca729a..6f29c72e25a 100644
--- a/app/services/projects/create_service.rb
+++ b/app/services/projects/create_service.rb
@@ -13,11 +13,11 @@ module Projects
@skip_wiki = @params.delete(:skip_wiki)
@initialize_with_sast = Gitlab::Utils.to_boolean(@params.delete(:initialize_with_sast))
@initialize_with_readme = Gitlab::Utils.to_boolean(@params.delete(:initialize_with_readme))
- @use_sha256_repository = Gitlab::Utils.to_boolean(@params.delete(:use_sha256_repository)) && Feature.enabled?(:support_sha256_repositories, user)
@import_data = @params.delete(:import_data)
@relations_block = @params.delete(:relations_block)
@default_branch = @params.delete(:default_branch)
@readme_template = @params.delete(:readme_template)
+ @repository_object_format = @params.delete(:repository_object_format)
build_topics
end
@@ -214,7 +214,10 @@ module Projects
end
def repository_object_format
- @use_sha256_repository ? Repository::FORMAT_SHA256 : Repository::FORMAT_SHA1
+ return Repository::FORMAT_SHA1 unless Feature.enabled?(:support_sha256_repositories, current_user)
+ return Repository::FORMAT_SHA256 if @repository_object_format == Repository::FORMAT_SHA256
+
+ Repository::FORMAT_SHA1
end
def readme_content
diff --git a/doc/development/documentation/styleguide/word_list.md b/doc/development/documentation/styleguide/word_list.md
index 3cbafc8f2c4..ed420341c56 100644
--- a/doc/development/documentation/styleguide/word_list.md
+++ b/doc/development/documentation/styleguide/word_list.md
@@ -1445,6 +1445,10 @@ When documenting the tasks that must be completed or the conditions that must be
Do not use **requirements**.
+## reset
+
+Use **reset** to describe the action associated with resetting an item to a new state.
+
## respectively
Avoid **respectively** and be more precise instead.
@@ -1458,6 +1462,10 @@ Instead of:
- Select **Create user** or **Save changes** if you created a new user or
edited an existing one respectively.
+## restore
+
+See the [Microsoft Style Guide](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/r/restore) for guidance on **restore**.
+
## review app
Use lowercase for **review app**.
@@ -1797,6 +1805,10 @@ See also [**enter**](#enter).
Use **Ultimate**, in uppercase, for the subscription tier. When you refer to **Ultimate**
in the context of other subscription tiers, follow [the subscription tier](#subscription-tier) guidance.
+## undo
+
+See the [Microsoft Style Guide](https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/u/undo) for guidance on **undo**.
+
## units of measurement
Use a space between the number and the unit of measurement. For example, **128 GB**.
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb
index 1da786c9fc4..5a7abf6cde8 100644
--- a/spec/services/projects/create_service_spec.rb
+++ b/spec/services/projects/create_service_spec.rb
@@ -814,7 +814,7 @@ RSpec.describe Projects::CreateService, '#execute', feature_category: :groups_an
context 'when SHA256 format is requested' do
let(:project) { create_project(user, opts) }
- let(:opts) { super().merge(initialize_with_readme: true, use_sha256_repository: true) }
+ let(:opts) { super().merge(initialize_with_readme: true, repository_object_format: 'sha256') }
before do
allow(Gitlab::CurrentSettings).to receive(:default_branch_name).and_return('main')
diff --git a/spec/support/rspec_run_time.rb b/spec/support/rspec_run_time.rb
index 875bdc0852e..841f714e369 100644
--- a/spec/support/rspec_run_time.rb
+++ b/spec/support/rspec_run_time.rb
@@ -14,25 +14,72 @@ module Support
def start(_notification)
@group_level = 0
@rspec_test_suite_start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
- output.puts "\n# Starting RSpec timer..."
+ output.puts "\n# [RSpecRunTime] Starting RSpec timer..."
+
+ init_expected_duration_report
end
- def example_group_started(_notification)
- @start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) if @group_level == 0
+ def example_group_started(notification)
+ if @group_level == 0
+ @current_group_start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
+ file_path = spec_file_path(notification)
+ output.puts "# [RSpecRunTime] Starting example group #{file_path}. #{expected_run_time(file_path)}"
+ end
+
@group_level += 1
end
def example_group_finished(notification)
@group_level -= 1 if @group_level > 0
- return unless @group_level == 0
+ if @group_level == 0
+ file_path = spec_file_path(notification)
+ time_now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
+ actual_duration = time_now - @current_group_start_time
+
+ output.puts "\n# [RSpecRunTime] #{file_path} took #{readable_duration(actual_duration)}. " \
+ "#{expected_run_time(file_path)}"
+ end
+
+ output_elapsed_time
+ end
+
+ private
+
+ def expected_duration_report
+ report_path = ENV['KNAPSACK_RSPEC_SUITE_REPORT_PATH']
+
+ return unless report_path && File.exist?(report_path)
+
+ # rubocop:disable Gitlab/Json -- regular JSON is sufficient
+ @expected_duration_report ||= JSON.parse(File.read(report_path))
+ # rubocop:enable Gitlab/Json
+ end
+ alias_method :init_expected_duration_report, :expected_duration_report
+
+ def spec_file_path(notification)
+ notification.group.metadata[:file_path].sub('./', '')
+ end
+
+ def expected_run_time(spec_file_path)
+ return '' unless expected_duration_report
+
+ expected_duration = expected_duration_report[spec_file_path]
+ return "Missing expected duration from Knapsack report for #{spec_file_path}." unless expected_duration
+
+ "Expected to take #{readable_duration(expected_duration)}."
+ end
+
+ def output_elapsed_time
time_now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
- duration = time_now - @start_time
- elapsed_time = time_now - @rspec_test_suite_start_time
+ elapsed_seconds = time_now - @rspec_test_suite_start_time
+
+ # skip the output unless the duration increased by at least 1 second
+ unless @last_elapsed_seconds.nil? || elapsed_seconds - @last_elapsed_seconds < 1
+ output.puts "# [RSpecRunTime] RSpec elapsed time: #{readable_duration(elapsed_seconds)}.\n\n"
+ end
- output.puts "\n# Example group #{notification.group.description} " \
- "(#{notification.group.metadata[:file_path]}) took #{readable_duration(duration)}."
- output.puts "# RSpec elapsed time: #{readable_duration(elapsed_time)}.\n\n"
+ @last_elapsed_seconds = elapsed_seconds
end
end
end