diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-19 15:10:08 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-19 15:10:08 +0300 |
commit | 1072f96e340ddad78e5dad6dfedc7c6e85fc53ea (patch) | |
tree | 573525bb3525f79cbb011f39ad11c11c6efea315 /app | |
parent | 8cc0a0aa965798e74826197d350472d235af2f84 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r-- | app/assets/javascripts/locale/index.js | 47 | ||||
-rw-r--r-- | app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js | 12 | ||||
-rw-r--r-- | app/graphql/types/ci/pipeline_type.rb | 3 | ||||
-rw-r--r-- | app/models/concerns/has_repository.rb | 5 | ||||
-rw-r--r-- | app/models/project.rb | 17 | ||||
-rw-r--r-- | app/models/repository.rb | 13 | ||||
-rw-r--r-- | app/policies/project_policy.rb | 10 | ||||
-rw-r--r-- | app/views/admin/application_settings/_usage.html.haml | 6 | ||||
-rw-r--r-- | app/views/admin/dev_ops_report/_report.html.haml | 2 | ||||
-rw-r--r-- | app/workers/jira_connect/sync_branch_worker.rb | 2 | ||||
-rw-r--r-- | app/workers/jira_connect/sync_builds_worker.rb | 2 | ||||
-rw-r--r-- | app/workers/jira_connect/sync_deployments_worker.rb | 2 | ||||
-rw-r--r-- | app/workers/jira_connect/sync_feature_flags_worker.rb | 2 | ||||
-rw-r--r-- | app/workers/jira_connect/sync_merge_request_worker.rb | 2 | ||||
-rw-r--r-- | app/workers/jira_connect/sync_project_worker.rb | 2 |
15 files changed, 96 insertions, 31 deletions
diff --git a/app/assets/javascripts/locale/index.js b/app/assets/javascripts/locale/index.js index 10518fa73d9..ad01da2eb17 100644 --- a/app/assets/javascripts/locale/index.js +++ b/app/assets/javascripts/locale/index.js @@ -2,7 +2,10 @@ import Jed from 'jed'; import ensureSingleLine from './ensure_single_line'; import sprintf from './sprintf'; -const languageCode = () => document.querySelector('html').getAttribute('lang') || 'en'; +const GITLAB_FALLBACK_LANGUAGE = 'en'; + +const languageCode = () => + document.querySelector('html').getAttribute('lang') || GITLAB_FALLBACK_LANGUAGE; const locale = new Jed(window.translations || {}); delete window.translations; @@ -51,12 +54,52 @@ const pgettext = (keyOrContext, key) => { }; /** + * Filters navigator languages by the set GitLab language. + * + * This allows us to decide better what a user wants as a locale, for using with the Intl browser APIs. + * If they have set their GitLab to a language, it will check whether `navigator.languages` contains matching ones. + * This function always adds `en` as a fallback in order to have date renders if all fails before it. + * + * - Example one: GitLab language is `en` and browser languages are: + * `['en-GB', 'en-US']`. This function returns `['en-GB', 'en-US', 'en']` as + * the preferred locales, the Intl APIs would try to format first as British English, + * if that isn't available US or any English. + * - Example two: GitLab language is `en` and browser languages are: + * `['de-DE', 'de']`. This function returns `['en']`, so the Intl APIs would prefer English + * formatting in order to not have German dates mixed with English GitLab UI texts. + * If the user wants for example British English formatting (24h, etc), + * they could set their browser languages to `['de-DE', 'de', 'en-GB']`. + * - Example three: GitLab language is `de` and browser languages are `['en-US', 'en']`. + * This function returns `['de', 'en']`, aligning German dates with the chosen translation of GitLab. + * + * @returns {string[]} + */ +export const getPreferredLocales = () => { + const gitlabLanguage = languageCode(); + // The GitLab language may or may not contain a country code, + // so we create the short version as well, e.g. de-AT => de + const lang = gitlabLanguage.substring(0, 2); + const locales = navigator.languages.filter((l) => l.startsWith(lang)); + if (!locales.includes(gitlabLanguage)) { + locales.push(gitlabLanguage); + } + if (!locales.includes(lang)) { + locales.push(lang); + } + if (!locales.includes(GITLAB_FALLBACK_LANGUAGE)) { + locales.push(GITLAB_FALLBACK_LANGUAGE); + } + return locales; +}; + +/** Creates an instance of Intl.DateTimeFormat for the current locale. @param formatOptions for available options, please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat @returns {Intl.DateTimeFormat} */ -const createDateTimeFormat = (formatOptions) => Intl.DateTimeFormat(languageCode(), formatOptions); +const createDateTimeFormat = (formatOptions) => + Intl.DateTimeFormat(getPreferredLocales(), formatOptions); /** * Formats a number as a string using `toLocaleString`. diff --git a/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js b/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js index bab3cce39ac..bf27b1a81ff 100644 --- a/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js +++ b/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js @@ -1,25 +1,25 @@ import { __ } from '~/locale'; -export const HELPER_TEXT_USAGE_PING_DISABLED = __( +export const HELPER_TEXT_SERVICE_PING_DISABLED = __( 'To enable Registration Features, make sure "Enable service ping" is checked.', ); -export const HELPER_TEXT_USAGE_PING_ENABLED = __( +export const HELPER_TEXT_SERVICE_PING_ENABLED = __( 'You can enable Registration Features because Service Ping is enabled. To continue using Registration Features in the future, you will also need to register with GitLab via a new cloud licensing service.', ); function setHelperText(usagePingCheckbox) { - const helperTextId = document.getElementById('usage_ping_features_helper_text'); + const helperTextId = document.getElementById('service_ping_features_helper_text'); - const usagePingFeaturesLabel = document.getElementById('usage_ping_features_label'); + const usagePingFeaturesLabel = document.getElementById('service_ping_features_label'); const usagePingFeaturesCheckbox = document.getElementById( 'application_setting_usage_ping_features_enabled', ); helperTextId.textContent = usagePingCheckbox.checked - ? HELPER_TEXT_USAGE_PING_ENABLED - : HELPER_TEXT_USAGE_PING_DISABLED; + ? HELPER_TEXT_SERVICE_PING_ENABLED + : HELPER_TEXT_SERVICE_PING_DISABLED; usagePingFeaturesLabel.classList.toggle('gl-cursor-not-allowed', !usagePingCheckbox.checked); diff --git a/app/graphql/types/ci/pipeline_type.rb b/app/graphql/types/ci/pipeline_type.rb index 2eeddaca6ba..f4a6c18f73e 100644 --- a/app/graphql/types/ci/pipeline_type.rb +++ b/app/graphql/types/ci/pipeline_type.rb @@ -150,6 +150,9 @@ module Types description: 'A specific test suite in a pipeline test report.', resolver: Resolvers::Ci::TestSuiteResolver + field :ref, GraphQL::STRING_TYPE, null: true, + description: 'Reference to the branch from which the pipeline was triggered.' + def detailed_status object.detailed_status(current_user) end diff --git a/app/models/concerns/has_repository.rb b/app/models/concerns/has_repository.rb index 33f6904bc91..1b4c590694a 100644 --- a/app/models/concerns/has_repository.rb +++ b/app/models/concerns/has_repository.rb @@ -14,6 +14,7 @@ module HasRepository include Gitlab::Utils::StrongMemoize delegate :base_dir, :disk_path, to: :storage + delegate :change_head, to: :repository def valid_repo? repository.exists? @@ -117,4 +118,8 @@ module HasRepository def repository_size_checker raise NotImplementedError end + + def after_repository_change_head + reload_default_branch + end end diff --git a/app/models/project.rb b/app/models/project.rb index 6873c5f8236..6d99fa31c3d 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1649,18 +1649,11 @@ class Project < ApplicationRecord :visibility_level end - def change_head(branch) - if repository.branch_exists?(branch) - repository.before_change_head - repository.raw_repository.write_ref('HEAD', "refs/heads/#{branch}") - repository.copy_gitattributes(branch) - repository.after_change_head - ProjectCacheWorker.perform_async(self.id, [], [:commit_count]) - reload_default_branch - else - errors.add(:base, _("Could not change HEAD: branch '%{branch}' does not exist") % { branch: branch }) - false - end + override :after_repository_change_head + def after_repository_change_head + ProjectCacheWorker.perform_async(self.id, [], [:commit_count]) + + super end def forked_from?(other_project) diff --git a/app/models/repository.rb b/app/models/repository.rb index 1bd61fe48cb..a77aaf02e06 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -466,6 +466,7 @@ class Repository # Runs code after the HEAD of a repository is changed. def after_change_head expire_all_method_caches + container.after_repository_change_head end # Runs code after a new commit has been pushed. @@ -1142,6 +1143,18 @@ class Repository Gitlab::CurrentSettings.pick_repository_storage end + def change_head(branch) + if branch_exists?(branch) + before_change_head + raw_repository.write_ref('HEAD', "refs/heads/#{branch}") + copy_gitattributes(branch) + after_change_head + else + container.errors.add(:base, _("Could not change HEAD: branch '%{branch}' does not exist") % { branch: branch }) + false + end + end + private # TODO Genericize finder, later split this on finders by Ref or Oid diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb index 2f01ab771dc..85547834a2e 100644 --- a/app/policies/project_policy.rb +++ b/app/policies/project_policy.rb @@ -54,6 +54,11 @@ class ProjectPolicy < BasePolicy !access_allowed_to?(:container_registry) end + desc "Container registry is enabled for everyone with access to the project" + condition(:container_registry_enabled_for_everyone_with_access, scope: :subject) do + project.container_registry_access_level == ProjectFeature::ENABLED + end + desc "Project has an external wiki" condition(:has_external_wiki, scope: :subject, score: 0) { project.has_external_wiki? } @@ -297,10 +302,13 @@ class ProjectPolicy < BasePolicy enable :guest_access enable :build_download_code - enable :build_read_container_image enable :request_access end + rule { container_registry_enabled_for_everyone_with_access & can?(:public_user_access) }.policy do + enable :build_read_container_image + end + rule { (can?(:public_user_access) | can?(:reporter_access)) & forking_allowed }.policy do enable :fork_project end diff --git a/app/views/admin/application_settings/_usage.html.haml b/app/views/admin/application_settings/_usage.html.haml index f45e6c5e8e9..ddd0abb4c34 100644 --- a/app/views/admin/application_settings/_usage.html.haml +++ b/app/views/admin/application_settings/_usage.html.haml @@ -39,14 +39,14 @@ - usage_ping_enabled = @application_setting.usage_ping_enabled? .form-check = f.check_box :usage_ping_features_enabled?, disabled: !usage_ping_enabled, class: 'form-check-input' - = f.label :usage_ping_features_enabled?, class: 'form-check-label gl-cursor-not-allowed', id: 'usage_ping_features_label' do + = f.label :usage_ping_features_enabled?, class: 'form-check-label gl-cursor-not-allowed', id: 'service_ping_features_label' do = _('Enable Registration Features') = link_to sprite_icon('question-o'), help_page_path('development/service_ping/index.md', anchor: 'registration-features-program') .form-text.text-muted - if usage_ping_enabled - %p.gl-mb-3.text-muted{ id: 'usage_ping_features_helper_text' }= _('You can enable Registration Features because Service Ping is enabled. To continue using Registration Features in the future, you will also need to register with GitLab via a new cloud licensing service.') + %p.gl-mb-3.text-muted{ id: 'service_ping_features_helper_text' }= _('You can enable Registration Features because Service Ping is enabled. To continue using Registration Features in the future, you will also need to register with GitLab via a new cloud licensing service.') - else - %p.gl-mb-3.text-muted{ id: 'usage_ping_features_helper_text' }= _('To enable Registration Features, make sure "Enable service ping" is checked.') + %p.gl-mb-3.text-muted{ id: 'service_ping_features_helper_text' }= _('To enable Registration Features, make sure "Enable service ping" is checked.') %p.gl-mb-3.text-muted= _('Registration Features include:') .form-text diff --git a/app/views/admin/dev_ops_report/_report.html.haml b/app/views/admin/dev_ops_report/_report.html.haml index c08a57fdb25..0b26548d6e6 100644 --- a/app/views/admin/dev_ops_report/_report.html.haml +++ b/app/views/admin/dev_ops_report/_report.html.haml @@ -4,6 +4,6 @@ = render 'callout' - if !service_ping_enabled - #js-devops-service-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/convdev/convdev_no_index.svg'), enable_service_ping_path: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/usage_ping/index.md') } } + #js-devops-service-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/convdev/convdev_no_index.svg'), enable_service_ping_path: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/service_ping/index.md') } } - else #js-devops-score{ data: { devops_score_metrics: devops_score_metrics(@metric).to_json, devops_report_docs_path: help_page_path('user/admin_area/analytics/dev_ops_report'), no_data_image_path: image_path('dev_ops_report_no_data.svg') } } diff --git a/app/workers/jira_connect/sync_branch_worker.rb b/app/workers/jira_connect/sync_branch_worker.rb index bd6023ccdd1..2723287b77b 100644 --- a/app/workers/jira_connect/sync_branch_worker.rb +++ b/app/workers/jira_connect/sync_branch_worker.rb @@ -8,7 +8,7 @@ module JiraConnect queue_namespace :jira_connect feature_category :integrations - data_consistency :delayed, feature_flag: :load_balancing_for_jira_connect_workers + data_consistency :delayed loggable_arguments 1, 2 worker_has_external_dependencies! diff --git a/app/workers/jira_connect/sync_builds_worker.rb b/app/workers/jira_connect/sync_builds_worker.rb index 4193b8ccdd7..4c4daba3314 100644 --- a/app/workers/jira_connect/sync_builds_worker.rb +++ b/app/workers/jira_connect/sync_builds_worker.rb @@ -8,7 +8,7 @@ module JiraConnect queue_namespace :jira_connect feature_category :integrations - data_consistency :delayed, feature_flag: :load_balancing_for_jira_connect_workers + data_consistency :delayed tags :exclude_from_kubernetes worker_has_external_dependencies! diff --git a/app/workers/jira_connect/sync_deployments_worker.rb b/app/workers/jira_connect/sync_deployments_worker.rb index d8d556d7102..0dc34b5999f 100644 --- a/app/workers/jira_connect/sync_deployments_worker.rb +++ b/app/workers/jira_connect/sync_deployments_worker.rb @@ -8,7 +8,7 @@ module JiraConnect queue_namespace :jira_connect feature_category :integrations - data_consistency :delayed, feature_flag: :load_balancing_for_jira_connect_workers + data_consistency :delayed tags :exclude_from_kubernetes worker_has_external_dependencies! diff --git a/app/workers/jira_connect/sync_feature_flags_worker.rb b/app/workers/jira_connect/sync_feature_flags_worker.rb index 919c76ab4c7..c484cabbe6b 100644 --- a/app/workers/jira_connect/sync_feature_flags_worker.rb +++ b/app/workers/jira_connect/sync_feature_flags_worker.rb @@ -8,7 +8,7 @@ module JiraConnect queue_namespace :jira_connect feature_category :integrations - data_consistency :delayed, feature_flag: :load_balancing_for_jira_connect_workers + data_consistency :delayed tags :exclude_from_kubernetes worker_has_external_dependencies! diff --git a/app/workers/jira_connect/sync_merge_request_worker.rb b/app/workers/jira_connect/sync_merge_request_worker.rb index f7115212792..bb0d24667e9 100644 --- a/app/workers/jira_connect/sync_merge_request_worker.rb +++ b/app/workers/jira_connect/sync_merge_request_worker.rb @@ -8,7 +8,7 @@ module JiraConnect queue_namespace :jira_connect feature_category :integrations - data_consistency :delayed, feature_flag: :load_balancing_for_jira_connect_workers + data_consistency :delayed worker_has_external_dependencies! diff --git a/app/workers/jira_connect/sync_project_worker.rb b/app/workers/jira_connect/sync_project_worker.rb index bca05b9311f..317bace89b4 100644 --- a/app/workers/jira_connect/sync_project_worker.rb +++ b/app/workers/jira_connect/sync_project_worker.rb @@ -8,7 +8,7 @@ module JiraConnect queue_namespace :jira_connect feature_category :integrations - data_consistency :delayed, feature_flag: :load_balancing_for_jira_connect_workers + data_consistency :delayed tags :exclude_from_kubernetes worker_has_external_dependencies! |