diff options
114 files changed, 2359 insertions, 263 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 072ded6134f..bcb344a73b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.11.4 (2019-06-26) + +### Fixed (3 changes) + +- Fix Fogbugz Importer not working. !29383 +- Fix scrolling to top on assignee change. !29500 +- Fix IDE commit using latest ref in branch and overriding contents. !29769 + + ## 11.11.3 (2019-06-10) ### Fixed (5 changes) diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 6f7c8cdabe5..c39f63b9efa 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -1.42.4 +1.42.5 @@ -419,7 +419,7 @@ group :ed25519 do end # Gitaly GRPC client -gem 'gitaly-proto', '~> 1.27.0', require: 'gitaly' +gem 'gitaly-proto', '~> 1.27.2', require: 'gitaly' gem 'grpc', '~> 1.19.0' diff --git a/Gemfile.lock b/Gemfile.lock index 3cd8ea5f708..8708e797339 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -283,7 +283,7 @@ GEM gettext_i18n_rails (>= 0.7.1) po_to_json (>= 1.0.0) rails (>= 3.2.0) - gitaly-proto (1.27.0) + gitaly-proto (1.27.2) grpc (~> 1.0) github-markup (1.7.0) gitlab-default_value_for (3.1.1) @@ -1065,7 +1065,7 @@ DEPENDENCIES gettext (~> 3.2.2) gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails_js (~> 1.3) - gitaly-proto (~> 1.27.0) + gitaly-proto (~> 1.27.2) github-markup (~> 1.7.0) gitlab-default_value_for (~> 3.1.1) gitlab-labkit (~> 0.2.0) @@ -1 +1 @@ -11.11.3 +11.11.4 diff --git a/app/assets/javascripts/gl_dropdown.js b/app/assets/javascripts/gl_dropdown.js index e52bc8583c6..7ac947c9836 100644 --- a/app/assets/javascripts/gl_dropdown.js +++ b/app/assets/javascripts/gl_dropdown.js @@ -563,7 +563,7 @@ GitLabDropdown = (function() { e.stopPropagation(); // This prevents automatic scrolling to the top - if ($target.is('a')) { + if ($target.closest('a').length) { return false; } } diff --git a/app/assets/javascripts/ide/services/index.js b/app/assets/javascripts/ide/services/index.js index ba33b6826d6..840761f68db 100644 --- a/app/assets/javascripts/ide/services/index.js +++ b/app/assets/javascripts/ide/services/index.js @@ -56,7 +56,13 @@ export default { return Api.branchSingle(projectId, currentBranchId); }, commit(projectId, payload) { - return Api.commitMultiple(projectId, payload); + // Currently the `commit` endpoint does not support `start_sha` so we + // have to make the request in the FE. This is not ideal and will be + // resolved soon. https://gitlab.com/gitlab-org/gitlab-ce/issues/59023 + const { branch, start_sha: ref } = payload; + const branchPromise = ref ? Api.createBranch(projectId, { ref, branch }) : Promise.resolve(); + + return branchPromise.then(() => Api.commitMultiple(projectId, payload)); }, getFiles(projectUrl, branchId) { const url = `${projectUrl}/files/${branchId}`; diff --git a/app/assets/javascripts/ide/stores/modules/commit/actions.js b/app/assets/javascripts/ide/stores/modules/commit/actions.js index c2760eb1554..e3ddfcbcbe2 100644 --- a/app/assets/javascripts/ide/stores/modules/commit/actions.js +++ b/app/assets/javascripts/ide/stores/modules/commit/actions.js @@ -123,6 +123,7 @@ export const commitChanges = ({ commit, state, getters, dispatch, rootState, roo getters, state, rootState, + rootGetters, }); return service.commit(rootState.currentProjectId, payload); diff --git a/app/assets/javascripts/ide/stores/utils.js b/app/assets/javascripts/ide/stores/utils.js index bcc9ca60d9b..4e7a8765abe 100644 --- a/app/assets/javascripts/ide/stores/utils.js +++ b/app/assets/javascripts/ide/stores/utils.js @@ -135,7 +135,14 @@ export const getCommitFiles = stagedFiles => }); }, []); -export const createCommitPayload = ({ branch, getters, newBranch, state, rootState }) => ({ +export const createCommitPayload = ({ + branch, + getters, + newBranch, + state, + rootState, + rootGetters, +}) => ({ branch, commit_message: state.commitMessage || getters.preBuiltCommitMessage, actions: getCommitFiles(rootState.stagedFiles).map(f => ({ @@ -146,7 +153,7 @@ export const createCommitPayload = ({ branch, getters, newBranch, state, rootSta encoding: f.base64 ? 'base64' : 'text', last_commit_id: newBranch || f.deleted || f.prevPath ? undefined : f.lastCommitSha, })), - start_branch: newBranch ? rootState.currentBranchId : undefined, + start_sha: newBranch ? rootGetters.lastCommit.short_id : undefined, }); export const createNewMergeRequestUrl = (projectUrl, source, target) => diff --git a/app/controllers/concerns/issuable_collections.rb b/app/controllers/concerns/issuable_collections.rb index 91e875dca54..8a6d7d1dfbf 100644 --- a/app/controllers/concerns/issuable_collections.rb +++ b/app/controllers/concerns/issuable_collections.rb @@ -41,7 +41,7 @@ module IssuableCollections return if pagination_disabled? @issuables = @issuables.page(params[:page]) - @issuable_meta_data = issuable_meta_data(@issuables, collection_type) + @issuable_meta_data = issuable_meta_data(@issuables, collection_type, current_user) @total_pages = issuable_page_count end # rubocop:enable Gitlab/ModuleWithInstanceVariables diff --git a/app/controllers/concerns/issuable_collections_action.rb b/app/controllers/concerns/issuable_collections_action.rb index 18ed4027eac..4ad287c4a13 100644 --- a/app/controllers/concerns/issuable_collections_action.rb +++ b/app/controllers/concerns/issuable_collections_action.rb @@ -11,7 +11,7 @@ module IssuableCollectionsAction .non_archived .page(params[:page]) - @issuable_meta_data = issuable_meta_data(@issues, collection_type) + @issuable_meta_data = issuable_meta_data(@issues, collection_type, current_user) respond_to do |format| format.html @@ -22,7 +22,7 @@ module IssuableCollectionsAction def merge_requests @merge_requests = issuables_collection.page(params[:page]) - @issuable_meta_data = issuable_meta_data(@merge_requests, collection_type) + @issuable_meta_data = issuable_meta_data(@merge_requests, collection_type, current_user) end # rubocop:enable Gitlab/ModuleWithInstanceVariables diff --git a/app/controllers/import/fogbugz_controller.rb b/app/controllers/import/fogbugz_controller.rb index a37ba682b91..28ead8d44da 100644 --- a/app/controllers/import/fogbugz_controller.rb +++ b/app/controllers/import/fogbugz_controller.rb @@ -11,7 +11,7 @@ class Import::FogbugzController < Import::BaseController def callback begin - res = Gitlab::FogbugzImport::Client.new(import_params.symbolize_keys) + res = Gitlab::FogbugzImport::Client.new(import_params.to_h.symbolize_keys) rescue # If the URI is invalid various errors can occur return redirect_to new_import_fogbugz_path, alert: _('Could not connect to FogBugz, check your URL') @@ -26,7 +26,7 @@ class Import::FogbugzController < Import::BaseController end def create_user_map - user_map = params[:users] + user_map = user_map_params.to_h[:users] unless user_map.is_a?(Hash) && user_map.all? { |k, v| !v[:name].blank? } flash.now[:alert] = _('All users must have a name.') @@ -99,6 +99,10 @@ class Import::FogbugzController < Import::BaseController params.permit(:uri, :email, :password) end + def user_map_params + params.permit(users: %w(name email gitlab_user)) + end + def verify_fogbugz_import_enabled render_404 unless fogbugz_import_enabled? end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 12db493978b..330e2d0f8a5 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -298,7 +298,7 @@ class ProjectsController < Projects::ApplicationController elsif @project.feature_available?(:issues, current_user) @issues = issuables_collection.page(params[:page]) @collection_type = 'Issue' - @issuable_meta_data = issuable_meta_data(@issues, @collection_type) + @issuable_meta_data = issuable_meta_data(@issues, @collection_type, current_user) end render :show diff --git a/app/controllers/snippets_controller.rb b/app/controllers/snippets_controller.rb index 8ea5450b4e8..fad036b8df8 100644 --- a/app/controllers/snippets_controller.rb +++ b/app/controllers/snippets_controller.rb @@ -137,7 +137,7 @@ class SnippetsController < ApplicationController def move_temporary_files params[:files].each do |file| - FileMover.new(file, @snippet).execute + FileMover.new(file, from_model: current_user, to_model: @snippet).execute end end end diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index 060b09f015c..47f9921a03b 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -41,7 +41,11 @@ class UploadsController < ApplicationController when Note can?(current_user, :read_project, model.project) when User - true + # We validate the current user has enough (writing) + # access to itself when a secret is given. + # For instance, user avatars are readable by anyone, + # while temporary, user snippet uploads are not. + !secret? || can?(current_user, :update_user, model) when Appearance true else @@ -56,9 +60,13 @@ class UploadsController < ApplicationController def authorize_create_access! return unless model - # for now we support only personal snippets comments. Only personal_snippet - # is allowed as a model to #create through routing. - authorized = can?(current_user, :create_note, model) + authorized = + case model + when User + can?(current_user, :update_user, model) + else + can?(current_user, :create_note, model) + end render_unauthorized unless authorized end @@ -75,6 +83,10 @@ class UploadsController < ApplicationController User === model || Appearance === model end + def secret? + params[:secret].present? + end + def upload_model_class MODEL_CLASSES[params[:model]] || raise(UnknownUploadModelError) end diff --git a/app/graphql/types/label_type.rb b/app/graphql/types/label_type.rb index ccd466edc1a..41d035c1aab 100644 --- a/app/graphql/types/label_type.rb +++ b/app/graphql/types/label_type.rb @@ -4,6 +4,8 @@ module Types class LabelType < BaseObject graphql_name 'Label' + authorize :read_label + field :description, GraphQL::STRING_TYPE, null: true field :title, GraphQL::STRING_TYPE, null: false field :color, GraphQL::STRING_TYPE, null: false diff --git a/app/graphql/types/metadata_type.rb b/app/graphql/types/metadata_type.rb index 2d8bad0614b..7d7813a7652 100644 --- a/app/graphql/types/metadata_type.rb +++ b/app/graphql/types/metadata_type.rb @@ -4,6 +4,8 @@ module Types class MetadataType < ::Types::BaseObject graphql_name 'Metadata' + authorize :read_instance_metadata + field :version, GraphQL::STRING_TYPE, null: false field :revision, GraphQL::STRING_TYPE, null: false end diff --git a/app/graphql/types/namespace_type.rb b/app/graphql/types/namespace_type.rb index 36d8ee8c878..501bfcf0fd5 100644 --- a/app/graphql/types/namespace_type.rb +++ b/app/graphql/types/namespace_type.rb @@ -4,6 +4,8 @@ module Types class NamespaceType < BaseObject graphql_name 'Namespace' + authorize :read_namespace + field :id, GraphQL::ID_TYPE, null: false field :name, GraphQL::STRING_TYPE, null: false diff --git a/app/graphql/types/project_type.rb b/app/graphql/types/project_type.rb index baea6658e05..51ac67217d1 100644 --- a/app/graphql/types/project_type.rb +++ b/app/graphql/types/project_type.rb @@ -66,7 +66,7 @@ module Types field :only_allow_merge_if_all_discussions_are_resolved, GraphQL::BOOLEAN_TYPE, null: true field :printing_merge_request_link_enabled, GraphQL::BOOLEAN_TYPE, null: true - field :namespace, Types::NamespaceType, null: false + field :namespace, Types::NamespaceType, null: true field :group, Types::GroupType, null: true field :merge_requests, diff --git a/app/graphql/types/query_type.rb b/app/graphql/types/query_type.rb index 40d7de1a49a..d021658879c 100644 --- a/app/graphql/types/query_type.rb +++ b/app/graphql/types/query_type.rb @@ -17,10 +17,7 @@ module Types field :metadata, Types::MetadataType, null: true, resolver: Resolvers::MetadataResolver, - description: 'Metadata about GitLab' do |*args| - - authorize :read_instance_metadata - end + description: 'Metadata about GitLab' field :echo, GraphQL::STRING_TYPE, null: false, function: Functions::Echo.new end diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb index 9a12db258d5..941b77c405b 100644 --- a/app/helpers/issuables_helper.rb +++ b/app/helpers/issuables_helper.rb @@ -280,7 +280,7 @@ module IssuablesHelper initialTaskStatus: issuable.task_status } - data[:hasClosingMergeRequest] = issuable.merge_requests_count != 0 if issuable.is_a?(Issue) + data[:hasClosingMergeRequest] = issuable.merge_requests_count(current_user) != 0 if issuable.is_a?(Issue) if parent.is_a?(Group) data[:groupPath] = parent.path diff --git a/app/helpers/snippets_helper.rb b/app/helpers/snippets_helper.rb index ecb2b2d707b..6ccc1fb2ed1 100644 --- a/app/helpers/snippets_helper.rb +++ b/app/helpers/snippets_helper.rb @@ -1,6 +1,16 @@ # frozen_string_literal: true module SnippetsHelper + def snippets_upload_path(snippet, user) + return unless user + + if snippet&.persisted? + upload_path('personal_snippet', id: snippet.id) + else + upload_path('user', id: user.id) + end + end + def reliable_snippet_path(snippet, opts = nil) if snippet.project_id? project_snippet_path(snippet.project, snippet, opts) diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 127430cc68f..299e413321d 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -29,7 +29,11 @@ module Issuable # This object is used to gather issuable meta data for displaying # upvotes, downvotes, notes and closing merge requests count for issues and merge requests # lists avoiding n+1 queries and improving performance. - IssuableMeta = Struct.new(:upvotes, :downvotes, :user_notes_count, :merge_requests_count) + IssuableMeta = Struct.new(:upvotes, :downvotes, :user_notes_count, :mrs_count) do + def merge_requests_count(user = nil) + mrs_count + end + end included do cache_markdown_field :title, pipeline: :single_line diff --git a/app/models/issue.rb b/app/models/issue.rb index eb5544f2a12..42597bda0e6 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -248,8 +248,8 @@ class Issue < ApplicationRecord end # rubocop: enable CodeReuse/ServiceClass - def merge_requests_count - merge_requests_closing_issues.count + def merge_requests_count(user = nil) + ::MergeRequestsClosingIssues.count_for_issue(self.id, user) end private diff --git a/app/models/merge_requests_closing_issues.rb b/app/models/merge_requests_closing_issues.rb index 61af50841ee..22cedf57b86 100644 --- a/app/models/merge_requests_closing_issues.rb +++ b/app/models/merge_requests_closing_issues.rb @@ -7,11 +7,38 @@ class MergeRequestsClosingIssues < ApplicationRecord validates :merge_request_id, uniqueness: { scope: :issue_id }, presence: true validates :issue_id, presence: true + scope :with_issues, ->(ids) { where(issue_id: ids) } + scope :with_merge_requests_enabled, -> do + joins(:merge_request) + .joins('INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id') + .where('project_features.merge_requests_access_level >= :access', access: ProjectFeature::ENABLED) + end + + scope :accessible_by, ->(user) do + joins(:merge_request) + .joins('INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id') + .where('project_features.merge_requests_access_level >= :access OR EXISTS(:authorizations)', + access: ProjectFeature::ENABLED, + authorizations: user.authorizations_for_projects(min_access_level: Gitlab::Access::REPORTER, related_project_column: "merge_requests.target_project_id") + ) + end + class << self - def count_for_collection(ids) - group(:issue_id) - .where(issue_id: ids) - .pluck('issue_id', 'COUNT(*) as count') + def count_for_collection(ids, current_user) + closing_merge_requests(ids, current_user).group(:issue_id).pluck('issue_id', 'COUNT(*) as count') + end + + def count_for_issue(id, current_user) + closing_merge_requests(id, current_user).count + end + + private + + def closing_merge_requests(ids, current_user) + return with_issues(ids) if current_user&.admin? + return with_issues(ids).with_merge_requests_enabled if current_user.blank? + + with_issues(ids).accessible_by(current_user) end end end diff --git a/app/policies/repository_policy.rb b/app/policies/repository_policy.rb new file mode 100644 index 00000000000..32340749858 --- /dev/null +++ b/app/policies/repository_policy.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class RepositoryPolicy < BasePolicy + delegate { @subject.project } +end diff --git a/app/services/ci/register_job_service.rb b/app/services/ci/register_job_service.rb index 6707a1363d0..ec0e7a7b9b5 100644 --- a/app/services/ci/register_job_service.rb +++ b/app/services/ci/register_job_service.rb @@ -6,7 +6,7 @@ module Ci class RegisterJobService attr_reader :runner - JOB_QUEUE_DURATION_SECONDS_BUCKETS = [1, 3, 10, 30].freeze + JOB_QUEUE_DURATION_SECONDS_BUCKETS = [1, 3, 10, 30, 60, 300].freeze JOBS_RUNNING_FOR_PROJECT_MAX_BUCKET = 5.freeze Result = Struct.new(:build, :valid?) diff --git a/app/services/projects/propagate_service_template.rb b/app/services/projects/propagate_service_template.rb index a2f36d2bd1b..a25c985585b 100644 --- a/app/services/projects/propagate_service_template.rb +++ b/app/services/projects/propagate_service_template.rb @@ -24,7 +24,7 @@ module Projects def propagate_projects_with_template loop do - batch = project_ids_batch + batch = Project.uncached { project_ids_batch } bulk_create_from_template(batch) unless batch.empty? diff --git a/app/uploaders/file_mover.rb b/app/uploaders/file_mover.rb index 236b7ed2b3d..dcf1e8792ad 100644 --- a/app/uploaders/file_mover.rb +++ b/app/uploaders/file_mover.rb @@ -1,12 +1,13 @@ # frozen_string_literal: true class FileMover - attr_reader :secret, :file_name, :model, :update_field + attr_reader :secret, :file_name, :from_model, :to_model, :update_field - def initialize(file_path, model, update_field = :description) + def initialize(file_path, update_field = :description, from_model:, to_model:) @secret = File.split(File.dirname(file_path)).last @file_name = File.basename(file_path) - @model = model + @from_model = from_model + @to_model = to_model @update_field = update_field end @@ -16,7 +17,7 @@ class FileMover move if update_markdown - uploader.record_upload + update_upload_model uploader.schedule_background_upload end end @@ -35,14 +36,20 @@ class FileMover end def update_markdown - updated_text = model.read_attribute(update_field) - .gsub(temp_file_uploader.markdown_link, uploader.markdown_link) - model.update_attribute(update_field, updated_text) + updated_text = to_model.read_attribute(update_field) + .gsub(temp_file_uploader.markdown_link, uploader.markdown_link) + to_model.update_attribute(update_field, updated_text) rescue revert false end + def update_upload_model + return unless upload = temp_file_uploader.upload + + upload.update!(model_id: to_model.id, model_type: to_model.type) + end + def temp_file_path return @temp_file_path if @temp_file_path @@ -60,15 +67,15 @@ class FileMover end def uploader - @uploader ||= PersonalFileUploader.new(model, secret: secret) + @uploader ||= PersonalFileUploader.new(to_model, secret: secret) end def temp_file_uploader - @temp_file_uploader ||= PersonalFileUploader.new(nil, secret: secret) + @temp_file_uploader ||= PersonalFileUploader.new(from_model, secret: secret) end def revert - Rails.logger.warn("Markdown not updated, file move reverted for #{model}") + Rails.logger.warn("Markdown not updated, file move reverted for #{to_model}") FileUtils.move(file_path, temp_file_path) end diff --git a/app/validators/color_validator.rb b/app/validators/color_validator.rb index 1932d042e83..974dfbbf394 100644 --- a/app/validators/color_validator.rb +++ b/app/validators/color_validator.rb @@ -12,7 +12,7 @@ # end # class ColorValidator < ActiveModel::EachValidator - PATTERN = /\A\#[0-9A-Fa-f]{3}{1,2}+\Z/.freeze + PATTERN = /\A\#(?:[0-9A-Fa-f]{3}){1,2}\Z/.freeze def validate_each(record, attribute, value) unless value =~ PATTERN diff --git a/app/views/layouts/snippets.html.haml b/app/views/layouts/snippets.html.haml index 5f986c81ff4..841b2a5e79c 100644 --- a/app/views/layouts/snippets.html.haml +++ b/app/views/layouts/snippets.html.haml @@ -1,9 +1,10 @@ - header_title _("Snippets"), snippets_path +- snippets_upload_path = snippets_upload_path(@snippet, current_user) - content_for :page_specific_javascripts do - - if @snippet && current_user + - if snippets_upload_path -# haml-lint:disable InlineJavaScript :javascript - window.uploads_path = "#{upload_path('personal_snippet', id: @snippet.id)}"; + window.uploads_path = "#{snippets_upload_path}"; = render template: "layouts/application" diff --git a/app/views/shared/_issuable_meta_data.html.haml b/app/views/shared/_issuable_meta_data.html.haml index 31a5370a5f8..71b13a5d741 100644 --- a/app/views/shared/_issuable_meta_data.html.haml +++ b/app/views/shared/_issuable_meta_data.html.haml @@ -2,7 +2,7 @@ - issue_votes = @issuable_meta_data[issuable.id] - upvotes, downvotes = issue_votes.upvotes, issue_votes.downvotes - issuable_url = @collection_type == "Issue" ? issue_path(issuable, anchor: 'notes') : merge_request_path(issuable, anchor: 'notes') -- issuable_mr = @issuable_meta_data[issuable.id].merge_requests_count +- issuable_mr = @issuable_meta_data[issuable.id].merge_requests_count(current_user) - if issuable_mr > 0 %li.issuable-mr.d-none.d-sm-block.has-tooltip{ title: _('Related merge requests') } diff --git a/changelogs/unreleased/osw-persist-tmp-snippet-uploads.yml b/changelogs/unreleased/osw-persist-tmp-snippet-uploads.yml new file mode 100644 index 00000000000..9348626c41d --- /dev/null +++ b/changelogs/unreleased/osw-persist-tmp-snippet-uploads.yml @@ -0,0 +1,5 @@ +--- +title: Persist tmp snippet uploads at users +merge_request: +author: +type: security diff --git a/changelogs/unreleased/security-2858-fix-color-validation.yml b/changelogs/unreleased/security-2858-fix-color-validation.yml new file mode 100644 index 00000000000..3430207a2b6 --- /dev/null +++ b/changelogs/unreleased/security-2858-fix-color-validation.yml @@ -0,0 +1,5 @@ +--- +title: Fix DoS vulnerability in color validation regex +merge_request: +author: +type: security diff --git a/changelogs/unreleased/security-59581-related-merge-requests-count.yml b/changelogs/unreleased/security-59581-related-merge-requests-count.yml new file mode 100644 index 00000000000..83faa2f7c13 --- /dev/null +++ b/changelogs/unreleased/security-59581-related-merge-requests-count.yml @@ -0,0 +1,5 @@ +--- +title: Expose merge requests count based on user access +merge_request: +author: +type: security diff --git a/changelogs/unreleased/security-DOS_issue_comments_banzai.yml b/changelogs/unreleased/security-DOS_issue_comments_banzai.yml new file mode 100644 index 00000000000..2405b1a4f5f --- /dev/null +++ b/changelogs/unreleased/security-DOS_issue_comments_banzai.yml @@ -0,0 +1,5 @@ +--- +title: Fix Denial of Service for comments when rendering issues/MR comments +merge_request: +author: +type: security diff --git a/changelogs/unreleased/security-bvl-enforce-graphql-type-authorization.yml b/changelogs/unreleased/security-bvl-enforce-graphql-type-authorization.yml new file mode 100644 index 00000000000..7dedb9f6230 --- /dev/null +++ b/changelogs/unreleased/security-bvl-enforce-graphql-type-authorization.yml @@ -0,0 +1,5 @@ +--- +title: Add missing authorizations in GraphQL +merge_request: +author: +type: security diff --git a/changelogs/unreleased/sh-service-template-bug.yml b/changelogs/unreleased/sh-service-template-bug.yml new file mode 100644 index 00000000000..be5d719c6b2 --- /dev/null +++ b/changelogs/unreleased/sh-service-template-bug.yml @@ -0,0 +1,5 @@ +--- +title: Disable Rails SQL query cache when applying service templates +merge_request: 30060 +author: +type: security diff --git a/config/routes/uploads.rb b/config/routes/uploads.rb index b594f55f8a0..920f8454ce2 100644 --- a/config/routes/uploads.rb +++ b/config/routes/uploads.rb @@ -7,7 +7,7 @@ scope path: :uploads do # show uploads for models, snippets (notes) available for now get '-/system/:model/:id/:secret/:filename', to: 'uploads#show', - constraints: { model: /personal_snippet/, id: /\d+/, filename: %r{[^/]+} } + constraints: { model: /personal_snippet|user/, id: /\d+/, filename: %r{[^/]+} } # show temporary uploads get '-/system/temp/:secret/:filename', @@ -28,7 +28,7 @@ scope path: :uploads do # create uploads for models, snippets (notes) available for now post ':model', to: 'uploads#create', - constraints: { model: /personal_snippet/, id: /\d+/ }, + constraints: { model: /personal_snippet|user/, id: /\d+/ }, as: 'upload' end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 32e96dae744..ce50f9a5817 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -493,9 +493,9 @@ module API expose :state, :created_at, :updated_at # Avoids an N+1 query when metadata is included - def issuable_metadata(subject, options, method) + def issuable_metadata(subject, options, method, args = nil) cached_subject = options.dig(:issuable_metadata, subject.id) - (cached_subject || subject).public_send(method) # rubocop: disable GitlabSecurity/PublicSend + (cached_subject || subject).public_send(method, *args) # rubocop: disable GitlabSecurity/PublicSend end end @@ -554,7 +554,7 @@ module API end expose(:user_notes_count) { |issue, options| issuable_metadata(issue, options, :user_notes_count) } - expose(:merge_requests_count) { |issue, options| issuable_metadata(issue, options, :merge_requests_count) } + expose(:merge_requests_count) { |issue, options| issuable_metadata(issue, options, :merge_requests_count, options[:current_user]) } expose(:upvotes) { |issue, options| issuable_metadata(issue, options, :upvotes) } expose(:downvotes) { |issue, options| issuable_metadata(issue, options, :downvotes) } expose :due_date diff --git a/lib/api/issues.rb b/lib/api/issues.rb index d0a93b77951..1e4d14a9a4c 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -93,7 +93,7 @@ module API options = { with: Entities::IssueBasic, current_user: current_user, - issuable_metadata: issuable_meta_data(issues, 'Issue') + issuable_metadata: issuable_meta_data(issues, 'Issue', current_user) } present issues, options @@ -120,7 +120,7 @@ module API options = { with: Entities::IssueBasic, current_user: current_user, - issuable_metadata: issuable_meta_data(issues, 'Issue') + issuable_metadata: issuable_meta_data(issues, 'Issue', current_user) } present issues, options @@ -150,7 +150,7 @@ module API with: Entities::IssueBasic, current_user: current_user, project: user_project, - issuable_metadata: issuable_meta_data(issues, 'Issue') + issuable_metadata: issuable_meta_data(issues, 'Issue', current_user) } present issues, options diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb index ce85772e4ed..9a1f7d44bcb 100644 --- a/lib/api/merge_requests.rb +++ b/lib/api/merge_requests.rb @@ -72,7 +72,7 @@ module API if params[:view] == 'simple' options[:with] = Entities::MergeRequestSimple else - options[:issuable_metadata] = issuable_meta_data(merge_requests, 'MergeRequest') + options[:issuable_metadata] = issuable_meta_data(merge_requests, 'MergeRequest', current_user) end options diff --git a/lib/api/todos.rb b/lib/api/todos.rb index d2196f05173..f332a554c41 100644 --- a/lib/api/todos.rb +++ b/lib/api/todos.rb @@ -65,7 +65,7 @@ module API next unless collection targets = collection.map(&:target) - options[type] = { issuable_metadata: issuable_meta_data(targets, type) } + options[type] = { issuable_metadata: issuable_meta_data(targets, type, current_user) } end end end diff --git a/lib/banzai/filter/relative_link_filter.rb b/lib/banzai/filter/relative_link_filter.rb index 199b3533cf4..cdf97e75491 100644 --- a/lib/banzai/filter/relative_link_filter.rb +++ b/lib/banzai/filter/relative_link_filter.rb @@ -100,7 +100,7 @@ module Banzai end def relative_file_path(uri) - path = Addressable::URI.unescape(uri.path) + path = Addressable::URI.unescape(uri.path).delete("\0") request_path = Addressable::URI.unescape(context[:requested_path]) nested_path = build_relative_path(path, request_path) file_exists?(nested_path) ? nested_path : path diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index fc9bcbdcca2..47b414bd9e4 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -310,6 +310,11 @@ module Gitlab (size.to_f / 1024).round(2) end + # Return git object directory size in bytes + def object_directory_size + gitaly_repository_client.get_object_directory_size.to_f * 1024 + end + # Build an array of commits. # # Usage. diff --git a/lib/gitlab/gitaly_client/repository_service.rb b/lib/gitlab/gitaly_client/repository_service.rb index 68b17e86608..d8e9dccb644 100644 --- a/lib/gitlab/gitaly_client/repository_service.rb +++ b/lib/gitlab/gitaly_client/repository_service.rb @@ -47,6 +47,13 @@ module Gitlab response.size end + def get_object_directory_size + request = Gitaly::GetObjectDirectorySizeRequest.new(repository: @gitaly_repo) + response = GitalyClient.call(@storage, :repository_service, :get_object_directory_size, request, timeout: GitalyClient.medium_timeout) + + response.size + end + def apply_gitattributes(revision) request = Gitaly::ApplyGitattributesRequest.new(repository: @gitaly_repo, revision: encode_binary(revision)) GitalyClient.call(@storage, :repository_service, :apply_gitattributes, request, timeout: GitalyClient.fast_timeout) diff --git a/lib/gitlab/graphql/authorize/authorize_field_service.rb b/lib/gitlab/graphql/authorize/authorize_field_service.rb index 619ce100421..3b5dde2fde5 100644 --- a/lib/gitlab/graphql/authorize/authorize_field_service.rb +++ b/lib/gitlab/graphql/authorize/authorize_field_service.rb @@ -39,6 +39,8 @@ module Gitlab type = node_type_for_basic_connection(type) end + type = type.unwrap if type.kind.non_null? + Array.wrap(type.metadata[:authorize]) end diff --git a/lib/gitlab/issuable_metadata.rb b/lib/gitlab/issuable_metadata.rb index 351d15605e0..be73bcd5506 100644 --- a/lib/gitlab/issuable_metadata.rb +++ b/lib/gitlab/issuable_metadata.rb @@ -2,7 +2,7 @@ module Gitlab module IssuableMetadata - def issuable_meta_data(issuable_collection, collection_type) + def issuable_meta_data(issuable_collection, collection_type, user = nil) # ActiveRecord uses Object#extend for null relations. if !(issuable_collection.singleton_class < ActiveRecord::NullRelation) && issuable_collection.respond_to?(:limit_value) && @@ -23,7 +23,7 @@ module Gitlab issuable_votes_count = ::AwardEmoji.votes_for_collection(issuable_ids, collection_type) issuable_merge_requests_count = if collection_type == 'Issue' - ::MergeRequestsClosingIssues.count_for_collection(issuable_ids) + ::MergeRequestsClosingIssues.count_for_collection(issuable_ids, user) else [] end diff --git a/locale/ar_SA/gitlab.po b/locale/ar_SA/gitlab.po index 9d3218cbd36..8dd481e3c04 100644 --- a/locale/ar_SA/gitlab.po +++ b/locale/ar_SA/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: ar\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:34\n" +"PO-Revision-Date: 2019-06-14 19:58\n" msgid " Please sign in." msgstr "" @@ -5664,6 +5664,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -6099,6 +6102,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6570,6 +6576,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6927,6 +6936,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7218,6 +7230,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7635,6 +7650,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -8097,6 +8115,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10971,6 +11004,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/bg/gitlab.po b/locale/bg/gitlab.po index f62cc8295f4..f421bf7519c 100644 --- a/locale/bg/gitlab.po +++ b/locale/bg/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: bg\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:35\n" +"PO-Revision-Date: 2019-06-14 19:59\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "Ðов етикет" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/bn_BD/gitlab.po b/locale/bn_BD/gitlab.po index dd593020e0f..d7f428aab32 100644 --- a/locale/bn_BD/gitlab.po +++ b/locale/bn_BD/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: bn\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:35\n" +"PO-Revision-Date: 2019-06-14 19:59\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/bn_IN/gitlab.po b/locale/bn_IN/gitlab.po index 75fdf861c0d..f06c8e9336c 100644 --- a/locale/bn_IN/gitlab.po +++ b/locale/bn_IN/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: bn-IN\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:35\n" +"PO-Revision-Date: 2019-06-14 19:59\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/ca_ES/gitlab.po b/locale/ca_ES/gitlab.po index 1facbc90b47..ca1d6f1203d 100644 --- a/locale/ca_ES/gitlab.po +++ b/locale/ca_ES/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: ca\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:36\n" +"PO-Revision-Date: 2019-06-14 19:59\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/cs_CZ/gitlab.po b/locale/cs_CZ/gitlab.po index f41277b2c79..cb285f19795 100644 --- a/locale/cs_CZ/gitlab.po +++ b/locale/cs_CZ/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: cs\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:35\n" +"PO-Revision-Date: 2019-06-14 19:58\n" msgid " Please sign in." msgstr "" @@ -5578,6 +5578,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -6011,6 +6014,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6480,6 +6486,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6833,6 +6842,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7124,6 +7136,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7539,6 +7554,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7999,6 +8017,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10863,6 +10896,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/cy_GB/gitlab.po b/locale/cy_GB/gitlab.po index 5d41baffb24..3690bb3c3ab 100644 --- a/locale/cy_GB/gitlab.po +++ b/locale/cy_GB/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: cy\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:40\n" +"PO-Revision-Date: 2019-06-14 20:03\n" msgid " Please sign in." msgstr "" @@ -5664,6 +5664,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -6099,6 +6102,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6570,6 +6576,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6927,6 +6936,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7218,6 +7230,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7635,6 +7650,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -8097,6 +8115,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10971,6 +11004,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/da_DK/gitlab.po b/locale/da_DK/gitlab.po index 0741f7e7e87..4e6ab1b1fd9 100644 --- a/locale/da_DK/gitlab.po +++ b/locale/da_DK/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: da\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:37\n" +"PO-Revision-Date: 2019-06-14 20:01\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/de/gitlab.po b/locale/de/gitlab.po index 7bf03d54f8a..0c2150e78e4 100644 --- a/locale/de/gitlab.po +++ b/locale/de/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: de\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:39\n" +"PO-Revision-Date: 2019-06-14 20:03\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "Google Takeout" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "Google-Authentifizierung ist nicht %{link_to_documentation}. Frage deinen GitLab Administrator, wenn du diesen Service nutzen möchtest." +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "Verstanden!" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "Wenn diese Option deaktiviert ist, wird ein abweichender lokaler Branch nicht automatisch mit Commits von seinem remote Gegenstück aktualisiert, um lokalen Datenverlust zu verhindern. Wenn der Standardbranch (%{default_branch}) abweicht und nicht aktualisiert werden kann, schlägt die Spiegelung fehl. Andere abweichende Branches werden ohne Meldung ignoriert." @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "Juli" @@ -6739,6 +6748,9 @@ msgstr "Sperren" msgid "Lock %{issuableDisplayName}" msgstr "Sperre %{issuableDisplayName}" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "Sperrung nicht gefunden" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "%{paragraphStart}hat die Beschreibung %{descriptionChangedTimes} Mal %{timeDifferenceMinutes} geändert%{paragraphEnd}" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "Neuer Tag" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "Neu..." @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "Letzte »" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/el_GR/gitlab.po b/locale/el_GR/gitlab.po index 142d421aed0..3694aec9c2e 100644 --- a/locale/el_GR/gitlab.po +++ b/locale/el_GR/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: el\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:39\n" +"PO-Revision-Date: 2019-06-14 20:03\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/eo/gitlab.po b/locale/eo/gitlab.po index ef131535e9d..37ba5512c96 100644 --- a/locale/eo/gitlab.po +++ b/locale/eo/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: eo\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:38\n" +"PO-Revision-Date: 2019-06-14 20:01\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "Nova etikedo" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/es/gitlab.po b/locale/es/gitlab.po index 0775ef83503..72b891c74f3 100644 --- a/locale/es/gitlab.po +++ b/locale/es/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: es-ES\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:32\n" +"PO-Revision-Date: 2019-06-14 19:56\n" msgid " Please sign in." msgstr " Por favor, inicie sesión." @@ -5492,6 +5492,9 @@ msgstr "Google Takeout" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "La autenticación de Google no se encuentra %{link_to_documentation}. Pregúntale a tu administrador de GitLab si quieres usar este servicio." +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "¡Lo tengo!" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "Jul" @@ -6739,6 +6748,9 @@ msgstr "Bloquear" msgid "Lock %{issuableDisplayName}" msgstr "Bloquear %{issuableDisplayName}" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "Bloqueo no encontrado" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "Nueva etiqueta" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "Nuevo..." @@ -7901,6 +7919,18 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "Último »" @@ -10755,6 +10785,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "Cambio sugerido" diff --git a/locale/et_EE/gitlab.po b/locale/et_EE/gitlab.po index 36f5074b8ff..3f609270fb3 100644 --- a/locale/et_EE/gitlab.po +++ b/locale/et_EE/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: et\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:38\n" +"PO-Revision-Date: 2019-06-14 20:02\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/fil_PH/gitlab.po b/locale/fil_PH/gitlab.po index c2139dcc495..ee6a7bb1841 100644 --- a/locale/fil_PH/gitlab.po +++ b/locale/fil_PH/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: fil\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:38\n" +"PO-Revision-Date: 2019-06-14 20:02\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/fr/gitlab.po b/locale/fr/gitlab.po index 0843adc6d56..18ed6e8bc31 100644 --- a/locale/fr/gitlab.po +++ b/locale/fr/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: fr\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:38\n" +"PO-Revision-Date: 2019-06-14 20:02\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "Google Takeout" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "L’authentification Google n’est pas %{link_to_documentation}. Demandez à votre administrat·eur·rice GitLab si vous souhaitez utiliser ce service." +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "Compris !" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "Si cette option est désactivée, une branche locale divergente ne sera pas automatiquement mise à jour avec les commits de son homologue distant, afin d’éviter toute perte de données locales. Si la branche par défaut (%{default_branch}) a divergé et ne peut pas être mise à jour, la mise en miroir échouera. Les autres branches divergentes sont ignorées silencieusement." @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "juill." @@ -6739,6 +6748,9 @@ msgstr "Verrouiller" msgid "Lock %{issuableDisplayName}" msgstr "Verrouiller %{issuableDisplayName}" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "Verrou non trouvé" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "%{paragraphStart}a changé la description %{descriptionChangedTimes} fois %{timeDifferenceMinutes}%{paragraphEnd}" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "Nouvelle étiquette" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "Nouveau…" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "Dernière ⇥" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/gl_ES/gitlab.po b/locale/gl_ES/gitlab.po index a773d0af51f..72d66916328 100644 --- a/locale/gl_ES/gitlab.po +++ b/locale/gl_ES/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: gl\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:39\n" +"PO-Revision-Date: 2019-06-14 20:02\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/he_IL/gitlab.po b/locale/he_IL/gitlab.po index 6210346cb46..55259bd6ccd 100644 --- a/locale/he_IL/gitlab.po +++ b/locale/he_IL/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: he\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:37\n" +"PO-Revision-Date: 2019-06-14 20:01\n" msgid " Please sign in." msgstr "" @@ -5578,6 +5578,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -6011,6 +6014,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6480,6 +6486,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6833,6 +6842,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7124,6 +7136,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7539,6 +7554,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7999,6 +8017,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10863,6 +10896,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/hi_IN/gitlab.po b/locale/hi_IN/gitlab.po index b7ea475b90a..988550bc6bd 100644 --- a/locale/hi_IN/gitlab.po +++ b/locale/hi_IN/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: hi\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:34\n" +"PO-Revision-Date: 2019-06-14 19:58\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/hr_HR/gitlab.po b/locale/hr_HR/gitlab.po index 5fe10132d71..932ddc735cb 100644 --- a/locale/hr_HR/gitlab.po +++ b/locale/hr_HR/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: hr\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:37\n" +"PO-Revision-Date: 2019-06-14 20:00\n" msgid " Please sign in." msgstr "" @@ -5535,6 +5535,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5967,6 +5970,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6435,6 +6441,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6786,6 +6795,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7077,6 +7089,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7491,6 +7506,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7950,6 +7968,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10809,6 +10842,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/hu_HU/gitlab.po b/locale/hu_HU/gitlab.po index b702cb701c6..a0752993314 100644 --- a/locale/hu_HU/gitlab.po +++ b/locale/hu_HU/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: hu\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:31\n" +"PO-Revision-Date: 2019-06-14 19:54\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/id_ID/gitlab.po b/locale/id_ID/gitlab.po index e3f45e5a4f1..04aec78eebb 100644 --- a/locale/id_ID/gitlab.po +++ b/locale/id_ID/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: id\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:34\n" +"PO-Revision-Date: 2019-06-14 19:57\n" msgid " Please sign in." msgstr "" @@ -5449,6 +5449,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5879,6 +5882,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6345,6 +6351,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6692,6 +6701,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -6983,6 +6995,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7395,6 +7410,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7852,6 +7870,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10701,6 +10734,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/it/gitlab.po b/locale/it/gitlab.po index 3a8b10706bc..f50b44895d4 100644 --- a/locale/it/gitlab.po +++ b/locale/it/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: it\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:28\n" +"PO-Revision-Date: 2019-06-14 19:52\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "L'autenticazione Google non è %{link_to_documentation}. Richiedi al tuo amministratore Gitlab se desideri utilizzare il servizio." +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "Lug" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "Nuovo tag" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "Ultima »" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/ja/gitlab.po b/locale/ja/gitlab.po index ed9037c9503..5192d1e44f2 100644 --- a/locale/ja/gitlab.po +++ b/locale/ja/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: ja\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:29\n" +"PO-Revision-Date: 2019-06-14 19:52\n" msgid " Please sign in." msgstr "" @@ -279,12 +279,12 @@ msgid_plural "%d Days" msgstr[0] "%d æ—¥" msgid "1 closed issue" -msgid_plural "%d closed issues" -msgstr[0] "%d件ã®ã‚¯ãƒãƒ¼ã‚ºã•ã‚ŒãŸèª²é¡Œ" +msgid_plural "%{issues} closed issues" +msgstr[0] "%{issues}件ã®ã‚¯ãƒãƒ¼ã‚ºã•ã‚ŒãŸèª²é¡Œ" msgid "1 closed merge request" -msgid_plural "%d closed merge requests" -msgstr[0] "%d件ã®ã‚¯ãƒãƒ¼ã‚ºã•ã‚ŒãŸãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" +msgid_plural "%{merge_requests} closed merge requests" +msgstr[0] "%{merge_requests}件ã®ã‚¯ãƒãƒ¼ã‚ºã•ã‚ŒãŸãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" msgid "1 day" msgstr "" @@ -294,16 +294,16 @@ msgid_plural "%d groups" msgstr[0] "%dグループ" msgid "1 merged merge request" -msgid_plural "%d merged merge requests" -msgstr[0] "%d件ã®ãƒžãƒ¼ã‚¸ã•ã‚ŒãŸãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" +msgid_plural "%{merge_requests} merged merge requests" +msgstr[0] "%{merge_requests}件ã®ãƒžãƒ¼ã‚¸ã•ã‚ŒãŸãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" msgid "1 open issue" -msgid_plural "%d open issues" -msgstr[0] "%d件ã®èª²é¡Œ" +msgid_plural "%{issues} open issues" +msgstr[0] "%{issues}件ã®èª²é¡Œ" msgid "1 open merge request" -msgid_plural "%d open merge requests" -msgstr[0] "%d件ã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" +msgid_plural "%{merge_requests} open merge requests" +msgstr[0] "%{merge_requests}件ã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" msgid "1 pipeline" msgid_plural "%d pipelines" @@ -853,7 +853,7 @@ msgid "Also called \"Relying party service URL\" or \"Reply URL\"" msgstr "\"Relying party service URL\" ã¾ãŸã¯ \"Reply URL\" ã¨ã‚‚呼ã°ã‚Œã¾ã™" msgid "Alternate support URL for help page" -msgstr "" +msgstr "ヘルプページã®åˆ¥ã®ã‚µãƒãƒ¼ãƒˆURL" msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect." msgstr "ã‚ã‚‹ã„ã¯ã€ %{personal_access_token_link} を使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚パーソナルアクセストークンを作æˆã™ã‚‹éš›ã«ã€<code>repo</code> スコープをé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€æŽ¥ç¶šå¯èƒ½ãªå…¬é–‹ãƒªãƒã‚¸ãƒˆãƒªã¨ãƒ—ライベートリãƒã‚¸ãƒˆãƒªã®ä¸€è¦§ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" @@ -1169,7 +1169,7 @@ msgid "ApprovalRule|Name" msgstr "åå‰" msgid "ApprovalRule|No. approvals required" -msgstr "" +msgstr "ã„ã„ãˆã€‚承èªãŒå¿…è¦ã§ã™ã€‚" msgid "ApprovalRule|e.g. QA, Security, etc." msgstr "" @@ -1543,6 +1543,30 @@ msgstr "ãƒãƒƒã‚¸" msgid "Badges|e.g. %{exampleUrl}" msgstr "例 %{exampleUrl}" +msgid "Badge|New" +msgstr "æ–°" + +msgid "Balsamiq file could not be loaded." +msgstr "Balsamiq ファイルをèªã¿è¾¼ã¿ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +msgid "BambooService|A continuous integration and build server" +msgstr "継続的インテグレーションã¨ãƒ“ルドサーãƒãƒ¼" + +msgid "BambooService|A user with API access, if applicable" +msgstr "APIアクセス権をæŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼(該当ã™ã‚‹å ´åˆ)" + +msgid "BambooService|Atlassian Bamboo CI" +msgstr "アトラシアンBamboo CI" + +msgid "BambooService|Bamboo build plan key like KEY" +msgstr "KEYã®ã‚ˆã†ãªBambooã®ãƒ“ルドプランã‚ー" + +msgid "BambooService|Bamboo root URL like https://bamboo.example.com" +msgstr "Bamboo ã®ãƒ«ãƒ¼ãƒˆURL 例: https://bamboo.example.com" + +msgid "BambooService|You must set up automatic revision labeling and a repository trigger in Bamboo." +msgstr "Bambooã§è‡ªå‹•ãƒªãƒ“ジョンラベリングã¨ãƒªãƒã‚¸ãƒˆãƒªãƒˆãƒªã‚¬ãƒ¼ã‚’è¨å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" + msgid "BatchComments|Delete all pending comments" msgstr "ä¿ç•™ä¸ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’ã™ã¹ã¦å‰Šé™¤" @@ -5449,6 +5473,9 @@ msgstr "Google テイクアウト" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "Google èªè¨¼ã¯ %{link_to_documentation} ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚µãƒ¼ãƒ“スã«ã¤ã„ã¦ã¯ GitLab 管ç†è€…ã«å•ã„åˆã‚ã›ã¦ãã ã•ã„。" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "入手ã—ã¾ã—ょã†ï¼" @@ -5879,6 +5906,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6345,6 +6375,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "7月" @@ -6692,6 +6725,9 @@ msgstr "ãƒãƒƒã‚¯" msgid "Lock %{issuableDisplayName}" msgstr "ãƒãƒƒã‚¯ %{issuableDisplayName}" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "ãƒãƒƒã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" @@ -6983,6 +7019,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7395,6 +7434,9 @@ msgstr "æ–°è¦ã‚¿ã‚°" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "æ–°è¦...\t" @@ -7781,7 +7823,7 @@ msgid "OperationsDashboard|Add a project to the dashboard" msgstr "" msgid "OperationsDashboard|Add projects" -msgstr "" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’è¿½åŠ " msgid "OperationsDashboard|More information" msgstr "" @@ -7852,6 +7894,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "最後 »" @@ -7934,7 +7991,7 @@ msgid "Personal Access Token" msgstr "個人ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³" msgid "Personal project creation is not allowed. Please contact your administrator with questions" -msgstr "" +msgstr "個人的ãªãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã®ä½œæˆã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。質å•ãŒã‚ã‚‹å ´åˆã¯ã‚·ã‚¹ãƒ†ãƒ ã®ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„" msgid "Pick a name" msgstr "åå‰ã‚’é¸æŠž" @@ -10701,6 +10758,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" @@ -12839,7 +12899,7 @@ msgid "You will lose all the unstaged changes you've made in this project. This msgstr "" msgid "You will need to update your local repositories to point to the new location." -msgstr "" +msgstr "ãƒãƒ¼ã‚«ãƒ«ãƒªãƒã‚¸ãƒˆãƒªãŒæ–°ã—ã„å ´æ‰€ã‚’ç¤ºã™ã‚ˆã†ã«æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" msgid "You will not get any notifications via email" msgstr "通知メールをé€ä¿¡ã—ã¾ã›ã‚“" diff --git a/locale/ka_GE/gitlab.po b/locale/ka_GE/gitlab.po index 392e35c5b88..5ba154256e8 100644 --- a/locale/ka_GE/gitlab.po +++ b/locale/ka_GE/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: ka\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:39\n" +"PO-Revision-Date: 2019-06-14 20:03\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/ko/gitlab.po b/locale/ko/gitlab.po index 75e53196f93..ca06e69c1ab 100644 --- a/locale/ko/gitlab.po +++ b/locale/ko/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: ko\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:29\n" +"PO-Revision-Date: 2019-06-14 19:52\n" msgid " Please sign in." msgstr "" @@ -5449,6 +5449,9 @@ msgstr "Google Takeout" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "Google ì¸ì¦ì„ ì‚¬ìš©í• ìˆ˜ 없습니다. %{link_to_documentation} GitLab 관리ìžì—게 문ì˜í•˜ì„¸ìš”." +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "확ì¸!" @@ -5879,6 +5882,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6345,6 +6351,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "7ì›”" @@ -6692,6 +6701,9 @@ msgstr "ìž ê¸ˆ" msgid "Lock %{issuableDisplayName}" msgstr "%{issuableDisplayName} ìž ê¸ˆ" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "ìž ê¸ˆì„ ì°¾ì„ ìˆ˜ 없습니다." @@ -6983,6 +6995,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7395,6 +7410,9 @@ msgstr "새 태그 " msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "새로 만들기..." @@ -7852,6 +7870,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "마지막 »" @@ -10701,6 +10734,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/mn_MN/gitlab.po b/locale/mn_MN/gitlab.po index 9018bdd7cb2..edf3550720a 100644 --- a/locale/mn_MN/gitlab.po +++ b/locale/mn_MN/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: mn\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:29\n" +"PO-Revision-Date: 2019-06-14 19:53\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/nb_NO/gitlab.po b/locale/nb_NO/gitlab.po index e6e7657d028..4b9b2688a9e 100644 --- a/locale/nb_NO/gitlab.po +++ b/locale/nb_NO/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: nb\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:29\n" +"PO-Revision-Date: 2019-06-14 19:53\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/nl_NL/gitlab.po b/locale/nl_NL/gitlab.po index b1cb8543b19..2545e5a3abc 100644 --- a/locale/nl_NL/gitlab.po +++ b/locale/nl_NL/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: nl\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:37\n" +"PO-Revision-Date: 2019-06-14 20:01\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/pa_IN/gitlab.po b/locale/pa_IN/gitlab.po index 3fe2383be2c..bf242beba24 100644 --- a/locale/pa_IN/gitlab.po +++ b/locale/pa_IN/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: pa-IN\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:28\n" +"PO-Revision-Date: 2019-06-14 19:52\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/pl_PL/gitlab.po b/locale/pl_PL/gitlab.po index cb99176aef0..8953c686555 100644 --- a/locale/pl_PL/gitlab.po +++ b/locale/pl_PL/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: pl\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:30\n" +"PO-Revision-Date: 2019-06-14 19:53\n" msgid " Please sign in." msgstr "" @@ -5578,6 +5578,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -6011,6 +6014,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6480,6 +6486,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6833,6 +6842,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7124,6 +7136,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7539,6 +7554,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7999,6 +8017,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10863,6 +10896,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/pt_BR/gitlab.po b/locale/pt_BR/gitlab.po index 41d12896559..c34ca5ca56b 100644 --- a/locale/pt_BR/gitlab.po +++ b/locale/pt_BR/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: pt-BR\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-13 15:37\n" +"PO-Revision-Date: 2019-06-14 19:54\n" msgid " Please sign in." msgstr " Por favor, entre usando sua conta." @@ -5492,6 +5492,9 @@ msgstr "Google Takeout" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "Autenticação do Google não está %{link_to_documentation}. Peça ao administrador do Gitlab se você deseja usar esse serviço." +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "Entendi!" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "Se desativada, um branch local divergente não será atualizada automaticamente com commits de sua contraparte remota, para evitar a perda de dados locais. Se o branch padrão (%{default_branch}) tiver divergido e não puder ser atualizado, o espelhamento falhará. Outras branches divergentes são silenciosamente ignoradas." @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "Jul" @@ -6739,6 +6748,9 @@ msgstr "Bloquear" msgid "Lock %{issuableDisplayName}" msgstr "Bloquear %{issuableDisplayName}" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "Bloqueio não encontrado" @@ -7030,6 +7042,9 @@ msgstr "iniciou uma discussão no commit %{linkStart}%{commitId}%{linkEnd}" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "%{paragraphStart}alterou a descrição %{descriptionChangedTimes} vezes %{timeDifferenceMinutes}%{paragraphEnd}" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "Erro ao carregar o diff completo. Por favor, tente novamente." @@ -7443,6 +7458,9 @@ msgstr "Nova tag" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "Novo..." @@ -7901,6 +7919,21 @@ msgstr "DomÃnio de páginas" msgid "Pages Domains" msgstr "DomÃnios de páginas" +msgid "Pages getting started guide" +msgstr "Guia de primeiros passos a Páginas" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "Último >>" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/pt_PT/gitlab.po b/locale/pt_PT/gitlab.po index 3a2d4ebb37f..f4ce5a0d63e 100644 --- a/locale/pt_PT/gitlab.po +++ b/locale/pt_PT/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: pt-PT\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:30\n" +"PO-Revision-Date: 2019-06-14 19:54\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/ro_RO/gitlab.po b/locale/ro_RO/gitlab.po index c508597c9cc..28f9ac20f38 100644 --- a/locale/ro_RO/gitlab.po +++ b/locale/ro_RO/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: ro\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:30\n" +"PO-Revision-Date: 2019-06-14 19:54\n" msgid " Please sign in." msgstr "" @@ -5535,6 +5535,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5967,6 +5970,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6435,6 +6441,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6786,6 +6795,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7077,6 +7089,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7491,6 +7506,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7950,6 +7968,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10809,6 +10842,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/ru/gitlab.po b/locale/ru/gitlab.po index 8298adf4526..8cb944f512c 100644 --- a/locale/ru/gitlab.po +++ b/locale/ru/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: ru\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-13 17:27\n" +"PO-Revision-Date: 2019-06-14 19:55\n" msgid " Please sign in." msgstr "" @@ -5578,6 +5578,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Google не %{link_to_documentation}. ПопроÑите Ñвоего админиÑтратора GitLab, еÑли вы хотите воÑпользоватьÑÑ Ñтим ÑервиÑом." +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "ПонÑтно!" @@ -6011,6 +6014,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6480,6 +6486,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "Июл." @@ -6833,6 +6842,9 @@ msgstr "Блокировка" msgid "Lock %{issuableDisplayName}" msgstr "Заблокировать %{issuableDisplayName}" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "Блокировка не найдена" @@ -7124,6 +7136,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "%{paragraphStart}изменил опиÑание %{descriptionChangedTimes} раз, за поÑледние %{timeDifferenceMinutes}%{paragraphEnd}" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7539,6 +7554,9 @@ msgstr "Ðовый тег" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "Ðовый..." @@ -7999,6 +8017,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "ПоÑледнÑÑ Â»" @@ -10863,6 +10896,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/sk_SK/gitlab.po b/locale/sk_SK/gitlab.po index 9a02c0d0f60..2c8156eb5c4 100644 --- a/locale/sk_SK/gitlab.po +++ b/locale/sk_SK/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: sk\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:32\n" +"PO-Revision-Date: 2019-06-14 19:56\n" msgid " Please sign in." msgstr "" @@ -5578,6 +5578,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -6011,6 +6014,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6480,6 +6486,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6833,6 +6842,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7124,6 +7136,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7539,6 +7554,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7999,6 +8017,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10863,6 +10896,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/sr_CS/gitlab.po b/locale/sr_CS/gitlab.po index 6a7a71426ef..729160728d9 100644 --- a/locale/sr_CS/gitlab.po +++ b/locale/sr_CS/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: sr-CS\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:31\n" +"PO-Revision-Date: 2019-06-14 19:55\n" msgid " Please sign in." msgstr "" @@ -5535,6 +5535,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5967,6 +5970,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6435,6 +6441,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6786,6 +6795,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7077,6 +7089,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7491,6 +7506,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7950,6 +7968,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10809,6 +10842,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/sr_SP/gitlab.po b/locale/sr_SP/gitlab.po index b8596ea8a38..66b2cc91978 100644 --- a/locale/sr_SP/gitlab.po +++ b/locale/sr_SP/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: sr\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:31\n" +"PO-Revision-Date: 2019-06-14 19:55\n" msgid " Please sign in." msgstr "" @@ -5535,6 +5535,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5967,6 +5970,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6435,6 +6441,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6786,6 +6795,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7077,6 +7089,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7491,6 +7506,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7950,6 +7968,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10809,6 +10842,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/sv_SE/gitlab.po b/locale/sv_SE/gitlab.po index 5504a0d8cf4..3fe084231ab 100644 --- a/locale/sv_SE/gitlab.po +++ b/locale/sv_SE/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: sv-SE\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:32\n" +"PO-Revision-Date: 2019-06-14 19:56\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/sw_KE/gitlab.po b/locale/sw_KE/gitlab.po index c56880bae2a..790b4ab23d6 100644 --- a/locale/sw_KE/gitlab.po +++ b/locale/sw_KE/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: sw\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:32\n" +"PO-Revision-Date: 2019-06-14 19:56\n" msgid " Please sign in." msgstr "" @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/tr_TR/gitlab.po b/locale/tr_TR/gitlab.po index 37fefca2afd..f50d93f34cf 100644 --- a/locale/tr_TR/gitlab.po +++ b/locale/tr_TR/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: tr\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-13 08:55\n" +"PO-Revision-Date: 2019-06-14 19:57\n" msgid " Please sign in." msgstr " Lütfen oturum açın." @@ -5492,6 +5492,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5923,6 +5926,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6390,6 +6396,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "Tem" @@ -6739,6 +6748,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -7030,6 +7042,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7443,6 +7458,9 @@ msgstr "Yeni etiket" msgid "New users set to external" msgstr "Yeni kullanıcılar harici olarak ayarlandı" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "Yeni..." @@ -7901,6 +7919,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10755,6 +10788,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/uk/gitlab.po b/locale/uk/gitlab.po index c99fee40c16..f6c7a683fef 100644 --- a/locale/uk/gitlab.po +++ b/locale/uk/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: uk\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-13 17:07\n" +"PO-Revision-Date: 2019-06-14 21:26\n" msgid " Please sign in." msgstr "" @@ -126,6 +126,13 @@ msgstr[1] "%d запита на злиттÑ" msgstr[2] "%d запитів на злиттÑ" msgstr[3] "%d запитів на злиттÑ" +msgid "%d merge request that you don't have access to." +msgid_plural "%d merge requests that you don't have access to." +msgstr[0] "%d запит на злиттÑ, до Ñкого ви не маєте доÑтупу." +msgstr[1] "%d запити на злиттÑ, до Ñких ви не маєте доÑтупу." +msgstr[2] "%d запитів на злиттÑ, до Ñких ви не маєте доÑтупу." +msgstr[3] "%d запитів на злиттÑ, до Ñких ви не маєте доÑтупу." + msgid "%d metric" msgid_plural "%d metrics" msgstr[0] "%d метрика" @@ -308,6 +315,25 @@ msgstr "%{usage_ping_link_start}ДовідатиÑÑŒ більше%{usage_ping_li msgid "%{user_name} profile page" msgstr "%{user_name} Ñторінка профілю" +msgid "%{verb} %{time_spent_value} spent time." +msgstr "%{verb} %{time_spent_value} витрачено чаÑу." + +msgid "'%{level}' is not a valid visibility level" +msgstr "\"%{level}\" не Ñ” допуÑтимим рівнем видимоÑÑ‚Ñ–" + +msgid "'%{source}' is not a import source" +msgstr "\"%{source}\" не Ñ” джерелом імпорту" + +msgid "(%d closed)" +msgid_plural "(%d closed)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "(%{mrCount} merged)" +msgstr "(%{mrCount} злито)" + msgid "(No changes)" msgstr "" @@ -1393,12 +1419,36 @@ msgstr "Ви дійÑно бажаєте ÑкаÑувати підпиÑку нРmsgid "Are you sure?" msgstr "Ви впевнені?" +msgid "Are you sure? All commits that were signed with this GPG key will be unverified." +msgstr "" + +msgid "Are you sure? Removing this GPG key does not affect already signed commits." +msgstr "" + +msgid "Are you sure? This will invalidate your registered applications and U2F devices." +msgstr "Ви впевнені? Це призведе до Ð°Ð½ÑƒÐ»ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ñ€ÐµÑ”Ñтрованих заÑтоÑунків та U2F приÑтроїв." + msgid "Artifact ID" msgstr "ID артефакту" msgid "Artifacts" msgstr "Ðртефакти" +msgid "As U2F devices are only supported by a few browsers, we require that you set up a two-factor authentication app before a U2F device. That way you'll always be able to log in - even when you're using an unsupported browser." +msgstr "ОÑкільки приÑтрої U2F підтримуютьÑÑ Ð»Ð¸ÑˆÐµ кількома браузерами, ми вимагаємо, щоб ви налаштували заÑтоÑунок Ð´Ð»Ñ Ð´Ð²Ð¾Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ñ— автентифікації перед приÑтроєм U2F. Таким чином ви завжди зможете увійти, навіть при викориÑтанні непідтримуваного браузера." + +msgid "AsanaService|%{user} pushed to branch %{branch} of %{project_name} ( %{commit_url} ):" +msgstr "%{user} відправив код в гілку %{branch} проекту %{project_name} (%{commit_url}):" + +msgid "AsanaService|Asana - Teamwork without email" +msgstr "Asana — командна робота без електронної пошти" + +msgid "AsanaService|Comma-separated list of branches which will be automatically inspected. Leave blank to include all branches." +msgstr "Розділений комами ÑпиÑок гілок, Ñкі будуть автоматично перевірÑтиÑÑ. Залиште порожнім, щоб включити уÑÑ– гілки." + +msgid "AsanaService|User Personal Access Token. User must have access to task, all comments will be attributed to this user." +msgstr "ОÑобиÑтий токен доÑтупу кориÑтувача. КориÑтувач повинен мати доÑтуп до завданнÑ, уÑÑ– коментарі будуть відноÑитиÑÑ Ð´Ð¾ нього." + msgid "Ascending" msgstr "За зроÑтаннÑм" @@ -2894,7 +2944,7 @@ msgid "Code owners" msgstr "ВлаÑники коду" msgid "CodeOwner|Pattern" -msgstr "" +msgstr "Шаблон" msgid "Cohorts" msgstr "Когорти" @@ -4161,6 +4211,9 @@ msgstr "" msgid "Enter in your Bitbucket Server URL and personal access token below" msgstr "Введіть URL-адреÑу вашого Bitbucket Server Ñ– ключ доÑтупу" +msgid "Enter in your Phabricator Server URL and personal access token below" +msgstr "Введіть URL-адреÑу вашого Ñервера Phabricator Ñ– перÑональний ключ доÑтупу" + msgid "Enter the issue description" msgstr "Введіть Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ–" @@ -5165,7 +5218,7 @@ msgid "GeoNodes|Out of sync" msgstr "РозÑинхронізовані" msgid "GeoNodes|Pausing replication stops the sync process." -msgstr "" +msgstr "ÐŸÑ€Ð¸Ð·ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð½Ñ Ñ€ÐµÐ¿Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ— зупинÑÑ” Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñинхронізації." msgid "GeoNodes|Removing a primary node stops the sync process for all nodes. Syncing cannot be resumed without losing some data on all secondaries. In this case we would recommend setting up all nodes from scratch. Are you sure?" msgstr "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ñновного вузла зупинÑÑ” Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñинхронізації Ð´Ð»Ñ Ð²ÑÑ–Ñ… вузлів. Синхронізацію неможливо буде відновити без втрати деÑких даних на вÑÑ–Ñ… вторинних вузлах. У цьому випадку рекомендовано налаштувати вÑÑ– вузли з нулÑ. Ви впевнені?" @@ -5291,7 +5344,7 @@ msgid "Geo|Could not remove tracking entry for an existing project." msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð²Ñ–Ð´ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ–Ñнуючого проекту." msgid "Geo|Could not remove tracking entry for an existing upload." -msgstr "" +msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð²Ñ–Ð´ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ–Ñнуючого завантаженнÑ." msgid "Geo|Failed" msgstr "Ðевдало" @@ -5342,7 +5395,7 @@ msgid "Geo|Pending verification" msgstr "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸" msgid "Geo|Please refer to Geo Troubleshooting." -msgstr "" +msgstr "Будь лаÑка, переглÑньте документацію з уÑÑƒÐ½ÐµÐ½Ð½Ñ Ð½ÐµÐ¿Ð¾Ð»Ð°Ð´Ð¾Ðº Geo." msgid "Geo|Project" msgstr "" @@ -5396,19 +5449,19 @@ msgid "Geo|Status" msgstr "СтатуÑ" msgid "Geo|Sync" -msgstr "" +msgstr "Синхронізувати" msgid "Geo|Synced" msgstr "Синхронізовано" msgid "Geo|Synced at" -msgstr "" +msgstr "Синхронізовано" msgid "Geo|Synchronization failed - %{error}" msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð½ÐµÐ²Ð´Ð°Ð»Ð°: %{error}" msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set" -msgstr "" +msgstr "URL-адреÑа, визначена на оÑновному вузлі, Ñку викориÑтовують вторинні вузли, щоб зв'ÑзатиÑÑ Ð· ним. Повертає \"url\", Ñкщо не вÑтановлено" msgid "Geo|This is a primary node" msgstr "Це — первинний вузол" @@ -5578,6 +5631,9 @@ msgstr "Google Takeout" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "ÐÐ²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Google не %{link_to_documentation}. ПопроÑÑ–Ñ‚ÑŒ Ñвого адмініÑтратора GitLab, Ñкщо ви хочете ÑкориÑтатиÑÑ Ñ†Ð¸Ð¼ ÑервіÑом." +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "Зрозуміло!" @@ -6011,6 +6067,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "Якщо увімкнено, тоді влаÑники груп зможуть керувати зв'Ñзками груп LDAP та перевизначеннÑм членів LDAP" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "Якщо вимкнено, локальна гілка зі змінами не буде автоматично підтÑгувати коміти з віддаленої гілки, щоб уникнути втрати локальних даних. Якщо гілка за замовчуваннÑм (%{default_branch}) міÑтить зміни Ñ– не може бути оновлена, тоді Ð´Ð·ÐµÑ€ÐºÐ°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ неможливим. Інші гілки зі змінами автоматично ігноруютьÑÑ." @@ -6480,6 +6539,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "лип." @@ -6833,6 +6895,9 @@ msgstr "Блокувати" msgid "Lock %{issuableDisplayName}" msgstr "Заблокувати %{issuableDisplayName}" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ знайдено" @@ -7124,6 +7189,9 @@ msgstr "розпочав (-ла) коміту %{linkStart}%{commitId}%{linkEnd}" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "%{paragraphStart} Ð¾Ð¿Ð¸Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ %{descriptionChangedTimes} раз(а,ів) %{timeDifferenceMinutes}%{paragraphEnd}" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "Помилка при заванаженні повного порівнÑннÑ. Будь лаÑка, Ñпробуйте знову." @@ -7539,6 +7607,9 @@ msgstr "Ðовий тег" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "Ðовий..." @@ -7999,6 +8070,21 @@ msgstr "Домен Pages" msgid "Pages Domains" msgstr "Домени Pages" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Â»" @@ -10863,6 +10949,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "Пропонована зміна" diff --git a/locale/zh_CN/gitlab.po b/locale/zh_CN/gitlab.po index 7ab1b5ecfe7..9f613e767a8 100644 --- a/locale/zh_CN/gitlab.po +++ b/locale/zh_CN/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: zh-CN\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:36\n" +"PO-Revision-Date: 2019-06-14 20:00\n" msgid " Please sign in." msgstr "" @@ -5449,6 +5449,9 @@ msgstr "Google Takeout" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "Google身份验è¯æœª%{link_to_documentation}。如需使用æ¤æœåŠ¡ï¼Œè¯·å’¨è¯¢GitLab管ç†å‘˜ã€‚" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "了解ï¼" @@ -5879,6 +5882,9 @@ msgstr "å¦‚æžœä»»ä½•ä½œä¸šè¶…è¿‡è¿™ä¸ªè¶…æ—¶é˜ˆå€¼ï¼Œå®ƒå°†è¢«æ ‡è®°ä¸ºå¤±è´¥ã€‚ msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "如果选ä¸ï¼Œåˆ™ç¾¤ç»„所有者å¯ä»¥ç®¡ç† LDAP 群组链接和 LDAP æˆå‘˜è¦†ç›–" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "如果ç¦ç”¨ï¼Œåˆ™ä¸ä¼šä½¿ç”¨è¿œç¨‹å‰¯æœ¬çš„æ交自动更新分å‰çš„本地分支,以防æ¢æœ¬åœ°æ•°æ®ä¸¢å¤±ã€‚如果默认分支 (%{default_branch}) 已分å‰ä¸”æ— æ³•æ›´æ–°ï¼Œåˆ™é•œåƒå°†å¤±è´¥ã€‚其他分å‰çš„分支默默被忽略。" @@ -6345,6 +6351,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "7月" @@ -6692,6 +6701,9 @@ msgstr "é”定" msgid "Lock %{issuableDisplayName}" msgstr "é”定 %{issuableDisplayName}" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "未找到é”" @@ -6983,6 +6995,9 @@ msgstr "开始讨论æ交%{linkStart}%{commitId}%{linkEnd}" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "%{paragraphStart}%{timeDifferenceMinutes}%{descriptionChangedTimes}次更改了æè¿°%{paragraphEnd}" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "åŠ è½½å®Œæ•´å·®å¼‚æ—¶å‡ºé”™ã€‚è¯·å†è¯•ä¸€æ¬¡ã€‚" @@ -7395,6 +7410,9 @@ msgstr "æ–°å»ºæ ‡ç¾" msgid "New users set to external" msgstr "新用户设置为外部" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "新建..." @@ -7852,6 +7870,21 @@ msgstr "Pages域å" msgid "Pages Domains" msgstr "Pages域å" +msgid "Pages getting started guide" +msgstr "Pages 入门指å—" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "尾页 »" @@ -10701,6 +10734,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "å˜æ›´å»ºè®®" diff --git a/locale/zh_HK/gitlab.po b/locale/zh_HK/gitlab.po index 8882be94797..7a2e64fecc5 100644 --- a/locale/zh_HK/gitlab.po +++ b/locale/zh_HK/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: zh-HK\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:36\n" +"PO-Revision-Date: 2019-06-14 20:00\n" msgid " Please sign in." msgstr "" @@ -5449,6 +5449,9 @@ msgstr "" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "" @@ -5879,6 +5882,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "" @@ -6345,6 +6351,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "" @@ -6692,6 +6701,9 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "" @@ -6983,6 +6995,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7395,6 +7410,9 @@ msgstr "新增標籤" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "" @@ -7852,6 +7870,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "" @@ -10701,6 +10734,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/locale/zh_TW/gitlab.po b/locale/zh_TW/gitlab.po index 1522f1c96ad..4623bf75d89 100644 --- a/locale/zh_TW/gitlab.po +++ b/locale/zh_TW/gitlab.po @@ -13,7 +13,7 @@ msgstr "" "X-Crowdin-Project: gitlab-ee\n" "X-Crowdin-Language: zh-TW\n" "X-Crowdin-File: /master/locale/gitlab.pot\n" -"PO-Revision-Date: 2019-04-12 12:36\n" +"PO-Revision-Date: 2019-06-14 20:00\n" msgid " Please sign in." msgstr "" @@ -5449,6 +5449,9 @@ msgstr "Google Takeout" msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service." msgstr "Google 身份驗è‰ä¸æ˜¯ %{link_to_documentation}。如果您想使用æ¤æœå‹™ï¼Œè«‹è«®è©¢ GitLab 管ç†å“¡ã€‚" +msgid "Got it" +msgstr "" + msgid "Got it!" msgstr "了解ï¼" @@ -5879,6 +5882,9 @@ msgstr "" msgid "If checked, group owners can manage LDAP group links and LDAP member overrides" msgstr "" +msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization" +msgstr "" + msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored." msgstr "如果åœç”¨ï¼Œå‰‡ä¸æœƒä½¿ç”¨é 端副本的æ交自動更新分支的本機分支,以防æ¢æœ¬æ©Ÿè³‡æ–™è¢«åˆªé™¤ã€‚如果é è¨åˆ†æ”¯ (%{default_branch}) 已被å†åˆ†æ”¯ä¸”無法更新時,則é¡åƒå°‡æœƒå¤±æ•—。其他å†åˆ†æ”¯çš„分支自動被忽略。" @@ -6345,6 +6351,9 @@ msgstr "" msgid "Job|with" msgstr "" +msgid "Join Zoom meeting" +msgstr "" + msgid "Jul" msgstr "七月" @@ -6692,6 +6701,9 @@ msgstr "鎖定" msgid "Lock %{issuableDisplayName}" msgstr "鎖定 %{issuableDisplayName}" +msgid "Lock memberships to LDAP synchronization" +msgstr "" + msgid "Lock not found" msgstr "找ä¸åˆ°éŽ–定的檔案" @@ -6983,6 +6995,9 @@ msgstr "" msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}" msgstr "%{paragraphStart} %{timeDifferenceMinutes} 修改了 %{descriptionChangedTimes} 次說明 %{paragraphEnd}" +msgid "MergeRequest|Error dismissing suggestion popover. Please try again." +msgstr "" + msgid "MergeRequest|Error loading full diff. Please try again." msgstr "" @@ -7395,6 +7410,9 @@ msgstr "新增標籤" msgid "New users set to external" msgstr "" +msgid "New! Suggest changes directly" +msgstr "" + msgid "New..." msgstr "新增…" @@ -7852,6 +7870,21 @@ msgstr "" msgid "Pages Domains" msgstr "" +msgid "Pages getting started guide" +msgstr "" + +msgid "Pagination|Go to first page" +msgstr "" + +msgid "Pagination|Go to last page" +msgstr "" + +msgid "Pagination|Go to next page" +msgstr "" + +msgid "Pagination|Go to previous page" +msgstr "" + msgid "Pagination|Last »" msgstr "最末é »" @@ -10701,6 +10734,9 @@ msgstr "" msgid "Successfully unlocked" msgstr "" +msgid "Suggest code changes which are immediately applied. Try it out!" +msgstr "" + msgid "Suggested change" msgstr "" diff --git a/spec/controllers/import/fogbugz_controller_spec.rb b/spec/controllers/import/fogbugz_controller_spec.rb index f1e0923f316..f7c813576aa 100644 --- a/spec/controllers/import/fogbugz_controller_spec.rb +++ b/spec/controllers/import/fogbugz_controller_spec.rb @@ -11,6 +11,44 @@ describe Import::FogbugzController do sign_in(user) end + describe 'POST #callback' do + let(:token) { FFaker::Lorem.characters(8) } + let(:uri) { 'https://example.com' } + let(:xml_response) { %Q(<?xml version=\"1.0\" encoding=\"UTF-8\"?><response><token><![CDATA[#{token}]]></token></response>) } + + it 'attempts to contact Fogbugz server' do + stub_request(:post, "https://example.com/api.asp").to_return(status: 200, body: xml_response, headers: {}) + + post :callback, params: { uri: uri, email: 'test@example.com', password: 'mypassword' } + + expect(session[:fogbugz_token]).to eq(token) + expect(session[:fogbugz_uri]).to eq(uri) + expect(response).to redirect_to(new_user_map_import_fogbugz_path) + end + end + + describe 'POST #create_user_map' do + let(:user_map) do + { + "2" => { + "name" => "Test User", + "email" => "testuser@example.com", + "gitlab_user" => "3" + } + } + end + + it 'stores the user map in the session' do + client = double(user_map: {}) + expect(controller).to receive(:client).and_return(client) + + post :create_user_map, params: { users: user_map } + + expect(session[:fogbugz_user_map]).to eq(user_map) + expect(response).to redirect_to(status_import_fogbugz_path) + end + end + describe 'GET status' do before do @repo = OpenStruct.new(name: 'vim') diff --git a/spec/controllers/snippets_controller_spec.rb b/spec/controllers/snippets_controller_spec.rb index f8666a1986f..3aba02bf3ff 100644 --- a/spec/controllers/snippets_controller_spec.rb +++ b/spec/controllers/snippets_controller_spec.rb @@ -209,8 +209,8 @@ describe SnippetsController do context 'when the snippet description contains a file' do include FileMoverHelpers - let(:picture_file) { '/-/system/temp/secret56/picture.jpg' } - let(:text_file) { '/-/system/temp/secret78/text.txt' } + let(:picture_file) { "/-/system/user/#{user.id}/secret56/picture.jpg" } + let(:text_file) { "/-/system/user/#{user.id}/secret78/text.txt" } let(:description) do "Description with picture: ![picture](/uploads#{picture_file}) and "\ "text: [text.txt](/uploads#{text_file})" diff --git a/spec/controllers/uploads_controller_spec.rb b/spec/controllers/uploads_controller_spec.rb index d27658e02cb..0876502a899 100644 --- a/spec/controllers/uploads_controller_spec.rb +++ b/spec/controllers/uploads_controller_spec.rb @@ -24,121 +24,160 @@ describe UploadsController do let!(:user) { create(:user, avatar: fixture_file_upload("spec/fixtures/dk.png", "image/png")) } describe 'POST create' do - let(:model) { 'personal_snippet' } - let(:snippet) { create(:personal_snippet, :public) } let(:jpg) { fixture_file_upload('spec/fixtures/rails_sample.jpg', 'image/jpg') } let(:txt) { fixture_file_upload('spec/fixtures/doc_sample.txt', 'text/plain') } - context 'when a user does not have permissions to upload a file' do - it "returns 401 when the user is not logged in" do - post :create, params: { model: model, id: snippet.id }, format: :json + context 'snippet uploads' do + let(:model) { 'personal_snippet' } + let(:snippet) { create(:personal_snippet, :public) } - expect(response).to have_gitlab_http_status(401) - end + context 'when a user does not have permissions to upload a file' do + it "returns 401 when the user is not logged in" do + post :create, params: { model: model, id: snippet.id }, format: :json - it "returns 404 when user can't comment on a snippet" do - private_snippet = create(:personal_snippet, :private) + expect(response).to have_gitlab_http_status(401) + end - sign_in(user) - post :create, params: { model: model, id: private_snippet.id }, format: :json + it "returns 404 when user can't comment on a snippet" do + private_snippet = create(:personal_snippet, :private) - expect(response).to have_gitlab_http_status(404) - end - end + sign_in(user) + post :create, params: { model: model, id: private_snippet.id }, format: :json - context 'when a user is logged in' do - before do - sign_in(user) + expect(response).to have_gitlab_http_status(404) + end end - it "returns an error without file" do - post :create, params: { model: model, id: snippet.id }, format: :json + context 'when a user is logged in' do + before do + sign_in(user) + end - expect(response).to have_gitlab_http_status(422) - end + it "returns an error without file" do + post :create, params: { model: model, id: snippet.id }, format: :json - it "returns an error with invalid model" do - expect { post :create, params: { model: 'invalid', id: snippet.id }, format: :json } - .to raise_error(ActionController::UrlGenerationError) - end + expect(response).to have_gitlab_http_status(422) + end - it "returns 404 status when object not found" do - post :create, params: { model: model, id: 9999 }, format: :json + it "returns an error with invalid model" do + expect { post :create, params: { model: 'invalid', id: snippet.id }, format: :json } + .to raise_error(ActionController::UrlGenerationError) + end - expect(response).to have_gitlab_http_status(404) - end + it "returns 404 status when object not found" do + post :create, params: { model: model, id: 9999 }, format: :json - context 'with valid image' do - before do - post :create, params: { model: 'personal_snippet', id: snippet.id, file: jpg }, format: :json + expect(response).to have_gitlab_http_status(404) end - it 'returns a content with original filename, new link, and correct type.' do - expect(response.body).to match '\"alt\":\"rails_sample\"' - expect(response.body).to match "\"url\":\"/uploads" + context 'with valid image' do + before do + post :create, params: { model: 'personal_snippet', id: snippet.id, file: jpg }, format: :json + end + + it 'returns a content with original filename, new link, and correct type.' do + expect(response.body).to match '\"alt\":\"rails_sample\"' + expect(response.body).to match "\"url\":\"/uploads" + end + + it 'creates a corresponding Upload record' do + upload = Upload.last + + aggregate_failures do + expect(upload).to exist + expect(upload.model).to eq snippet + end + end end - it 'creates a corresponding Upload record' do - upload = Upload.last + context 'with valid non-image file' do + before do + post :create, params: { model: 'personal_snippet', id: snippet.id, file: txt }, format: :json + end - aggregate_failures do - expect(upload).to exist - expect(upload.model).to eq snippet + it 'returns a content with original filename, new link, and correct type.' do + expect(response.body).to match '\"alt\":\"doc_sample.txt\"' + expect(response.body).to match "\"url\":\"/uploads" + end + + it 'creates a corresponding Upload record' do + upload = Upload.last + + aggregate_failures do + expect(upload).to exist + expect(upload.model).to eq snippet + end end end end + end + + context 'user uploads' do + let(:model) { 'user' } + + it 'returns 401 when the user has no access' do + post :create, params: { model: 'user', id: user.id }, format: :json - context 'with valid non-image file' do + expect(response).to have_gitlab_http_status(401) + end + + context 'when user is logged in' do before do - post :create, params: { model: 'personal_snippet', id: snippet.id, file: txt }, format: :json + sign_in(user) + end + + subject do + post :create, params: { model: model, id: user.id, file: jpg }, format: :json end it 'returns a content with original filename, new link, and correct type.' do - expect(response.body).to match '\"alt\":\"doc_sample.txt\"' - expect(response.body).to match "\"url\":\"/uploads" + subject + + expect(response.body).to match '\"alt\":\"rails_sample\"' + expect(response.body).to match "\"url\":\"/uploads/-/system/user/#{user.id}/" end it 'creates a corresponding Upload record' do + expect { subject }.to change { Upload.count } + upload = Upload.last aggregate_failures do expect(upload).to exist - expect(upload.model).to eq snippet + expect(upload.model).to eq user end end - end - context 'temporal with valid image' do - subject do - post :create, params: { model: 'personal_snippet', file: jpg }, format: :json - end + context 'with valid non-image file' do + subject do + post :create, params: { model: model, id: user.id, file: txt }, format: :json + end - it 'returns a content with original filename, new link, and correct type.' do - subject + it 'returns a content with original filename, new link, and correct type.' do + subject - expect(response.body).to match '\"alt\":\"rails_sample\"' - expect(response.body).to match "\"url\":\"/uploads/-/system/temp" - end + expect(response.body).to match '\"alt\":\"doc_sample.txt\"' + expect(response.body).to match "\"url\":\"/uploads/-/system/user/#{user.id}/" + end - it 'does not create an Upload record' do - expect { subject }.not_to change { Upload.count } - end - end + it 'creates a corresponding Upload record' do + expect { subject }.to change { Upload.count } - context 'temporal with valid non-image file' do - subject do - post :create, params: { model: 'personal_snippet', file: txt }, format: :json + upload = Upload.last + + aggregate_failures do + expect(upload).to exist + expect(upload.model).to eq user + end + end end - it 'returns a content with original filename, new link, and correct type.' do - subject + it 'returns 404 when given user is not the logged in one' do + another_user = create(:user) - expect(response.body).to match '\"alt\":\"doc_sample.txt\"' - expect(response.body).to match "\"url\":\"/uploads/-/system/temp" - end + post :create, params: { model: model, id: another_user.id, file: txt }, format: :json - it 'does not create an Upload record' do - expect { subject }.not_to change { Upload.count } + expect(response).to have_gitlab_http_status(404) end end end diff --git a/spec/features/snippets/user_creates_snippet_spec.rb b/spec/features/snippets/user_creates_snippet_spec.rb index 1c97d5ec5b4..93d77d5b5ce 100644 --- a/spec/features/snippets/user_creates_snippet_spec.rb +++ b/spec/features/snippets/user_creates_snippet_spec.rb @@ -41,7 +41,7 @@ describe 'User creates snippet', :js do expect(page).to have_content('My Snippet') link = find('a.no-attachment-icon img[alt="banana_sample"]')['src'] - expect(link).to match(%r{/uploads/-/system/temp/\h{32}/banana_sample\.gif\z}) + expect(link).to match(%r{/uploads/-/system/user/#{user.id}/\h{32}/banana_sample\.gif\z}) reqs = inspect_requests { visit(link) } expect(reqs.first.status_code).to eq(200) diff --git a/spec/frontend/ide/services/index_spec.js b/spec/frontend/ide/services/index_spec.js new file mode 100644 index 00000000000..499fa8fc012 --- /dev/null +++ b/spec/frontend/ide/services/index_spec.js @@ -0,0 +1,55 @@ +import services from '~/ide/services'; +import Api from '~/api'; + +jest.mock('~/api'); + +const TEST_PROJECT_ID = 'alice/wonderland'; +const TEST_BRANCH = 'master-patch-123'; +const TEST_COMMIT_SHA = '123456789'; + +describe('IDE services', () => { + describe('commit', () => { + let payload; + + beforeEach(() => { + payload = { + branch: TEST_BRANCH, + commit_message: 'Hello world', + actions: [], + start_sha: undefined, + }; + + Api.createBranch.mockReturnValue(Promise.resolve()); + Api.commitMultiple.mockReturnValue(Promise.resolve()); + }); + + describe.each` + startSha | shouldCreateBranch + ${undefined} | ${false} + ${TEST_COMMIT_SHA} | ${true} + `('when start_sha is $startSha', ({ startSha, shouldCreateBranch }) => { + beforeEach(() => { + payload.start_sha = startSha; + + return services.commit(TEST_PROJECT_ID, payload); + }); + + if (shouldCreateBranch) { + it('should create branch', () => { + expect(Api.createBranch).toHaveBeenCalledWith(TEST_PROJECT_ID, { + ref: TEST_COMMIT_SHA, + branch: TEST_BRANCH, + }); + }); + } else { + it('should not create branch', () => { + expect(Api.createBranch).not.toHaveBeenCalled(); + }); + } + + it('should commit', () => { + expect(Api.commitMultiple).toHaveBeenCalledWith(TEST_PROJECT_ID, payload); + }); + }); + }); +}); diff --git a/spec/graphql/types/label_type_spec.rb b/spec/graphql/types/label_type_spec.rb new file mode 100644 index 00000000000..da2b0b578da --- /dev/null +++ b/spec/graphql/types/label_type_spec.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true +require 'spec_helper' + +describe GitlabSchema.types['Label'] do + it { is_expected.to require_graphql_authorizations(:read_label) } +end diff --git a/spec/graphql/types/metadata_type_spec.rb b/spec/graphql/types/metadata_type_spec.rb index 55205bf5b6a..5236380e477 100644 --- a/spec/graphql/types/metadata_type_spec.rb +++ b/spec/graphql/types/metadata_type_spec.rb @@ -2,4 +2,5 @@ require 'spec_helper' describe GitlabSchema.types['Metadata'] do it { expect(described_class.graphql_name).to eq('Metadata') } + it { is_expected.to require_graphql_authorizations(:read_instance_metadata) } end diff --git a/spec/graphql/types/namespace_type.rb b/spec/graphql/types/namespace_type.rb index 7cd6a79ae5d..3aeea6ed6c7 100644 --- a/spec/graphql/types/namespace_type.rb +++ b/spec/graphql/types/namespace_type.rb @@ -4,4 +4,8 @@ require 'spec_helper' describe GitlabSchema.types['Namespace'] do it { expect(described_class.graphql_name).to eq('Namespace') } + + it { expect(described_class).to have_graphql_field(:projects) } + + it { is_expected.to require_graphql_authorizations(:read_namespace) } end diff --git a/spec/graphql/types/query_type_spec.rb b/spec/graphql/types/query_type_spec.rb index b4626955816..71aa38bf73c 100644 --- a/spec/graphql/types/query_type_spec.rb +++ b/spec/graphql/types/query_type_spec.rb @@ -24,9 +24,5 @@ describe GitlabSchema.types['Query'] do is_expected.to have_graphql_type(Types::MetadataType) is_expected.to have_graphql_resolver(Resolvers::MetadataResolver) end - - it 'authorizes with read_instance_metadata' do - is_expected.to require_graphql_authorizations(:read_instance_metadata) - end end end diff --git a/spec/javascripts/ide/stores/modules/commit/actions_spec.js b/spec/javascripts/ide/stores/modules/commit/actions_spec.js index cdeb9b4b896..39902157441 100644 --- a/spec/javascripts/ide/stores/modules/commit/actions_spec.js +++ b/spec/javascripts/ide/stores/modules/commit/actions_spec.js @@ -7,6 +7,8 @@ import consts from '~/ide/stores/modules/commit/constants'; import { commitActionTypes } from '~/ide/constants'; import { resetStore, file } from 'spec/ide/helpers'; +const TEST_COMMIT_SHA = '123456789'; + describe('IDE commit module actions', () => { beforeEach(() => { spyOn(router, 'push'); @@ -136,6 +138,9 @@ describe('IDE commit module actions', () => { branches: { master: { workingReference: '', + commit: { + short_id: TEST_COMMIT_SHA, + }, }, }, }; @@ -236,6 +241,9 @@ describe('IDE commit module actions', () => { branches: { master: { workingReference: '1', + commit: { + short_id: TEST_COMMIT_SHA, + }, }, }, }; @@ -244,7 +252,7 @@ describe('IDE commit module actions', () => { ...file('changed'), type: 'blob', active: true, - lastCommitSha: '123456789', + lastCommitSha: TEST_COMMIT_SHA, }; store.state.stagedFiles.push(f); store.state.changedFiles = [ @@ -303,7 +311,7 @@ describe('IDE commit module actions', () => { previous_path: undefined, }, ], - start_branch: 'master', + start_sha: TEST_COMMIT_SHA, }); done(); @@ -326,11 +334,11 @@ describe('IDE commit module actions', () => { file_path: jasmine.anything(), content: undefined, encoding: jasmine.anything(), - last_commit_id: '123456789', + last_commit_id: TEST_COMMIT_SHA, previous_path: undefined, }, ], - start_branch: undefined, + start_sha: undefined, }); done(); diff --git a/spec/javascripts/ide/stores/utils_spec.js b/spec/javascripts/ide/stores/utils_spec.js index debe1c4acee..e3bf6d40245 100644 --- a/spec/javascripts/ide/stores/utils_spec.js +++ b/spec/javascripts/ide/stores/utils_spec.js @@ -132,7 +132,7 @@ describe('Multi-file store utils', () => { previous_path: undefined, }, ], - start_branch: undefined, + start_sha: undefined, }); }); @@ -187,7 +187,7 @@ describe('Multi-file store utils', () => { previous_path: undefined, }, ], - start_branch: undefined, + start_sha: undefined, }); }); }); diff --git a/spec/lib/banzai/filter/relative_link_filter_spec.rb b/spec/lib/banzai/filter/relative_link_filter_spec.rb index dad0a5535c0..a6e8a2fc8fc 100644 --- a/spec/lib/banzai/filter/relative_link_filter_spec.rb +++ b/spec/lib/banzai/filter/relative_link_filter_spec.rb @@ -83,6 +83,11 @@ describe Banzai::Filter::RelativeLinkFilter do expect { filter(act) }.not_to raise_error end + it 'does not explode with an escaped null byte' do + act = link("/%00") + expect { filter(act) }.not_to raise_error + end + it 'does not raise an exception with a space in the path' do act = link("/uploads/d18213acd3732630991986120e167e3d/Landscape_8.jpg \nBut here's some more unexpected text :smile:)") expect { filter(act) }.not_to raise_error diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index 7644d83992f..b4bfb1c5b5a 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -231,6 +231,18 @@ describe Gitlab::Git::Repository, :seed_helper do it { is_expected.to be < 2 } end + describe '#object_directory_size' do + before do + allow(repository.gitaly_repository_client) + .to receive(:get_object_directory_size) + .and_return(2) + end + + subject { repository.object_directory_size } + + it { is_expected.to eq 2048 } + end + describe '#empty?' do it { expect(repository).not_to be_empty } end diff --git a/spec/lib/gitlab/gitaly_client/repository_service_spec.rb b/spec/lib/gitlab/gitaly_client/repository_service_spec.rb index 09de7ca6afd..a3808adb376 100644 --- a/spec/lib/gitlab/gitaly_client/repository_service_spec.rb +++ b/spec/lib/gitlab/gitaly_client/repository_service_spec.rb @@ -73,6 +73,17 @@ describe Gitlab::GitalyClient::RepositoryService do end end + describe '#get_object_directory_size' do + it 'sends a get_object_directory_size message' do + expect_any_instance_of(Gitaly::RepositoryService::Stub) + .to receive(:get_object_directory_size) + .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash)) + .and_return(size: 0) + + client.get_object_directory_size + end + end + describe '#apply_gitattributes' do let(:revision) { 'master' } diff --git a/spec/lib/gitlab/graphql/authorize/authorize_field_service_spec.rb b/spec/lib/gitlab/graphql/authorize/authorize_field_service_spec.rb index aec9c4baf0a..d60d1b7559a 100644 --- a/spec/lib/gitlab/graphql/authorize/authorize_field_service_spec.rb +++ b/spec/lib/gitlab/graphql/authorize/authorize_field_service_spec.rb @@ -7,35 +7,39 @@ require 'spec_helper' describe Gitlab::Graphql::Authorize::AuthorizeFieldService do def type(type_authorizations = []) Class.new(Types::BaseObject) do - graphql_name "TestType" + graphql_name 'TestType' authorize type_authorizations end end - def type_with_field(field_type, field_authorizations = [], resolved_value = "Resolved value") + def type_with_field(field_type, field_authorizations = [], resolved_value = 'Resolved value', **options) Class.new(Types::BaseObject) do - graphql_name "TestTypeWithField" - field :test_field, field_type, null: true, authorize: field_authorizations, resolve: -> (_, _, _) { resolved_value} + graphql_name 'TestTypeWithField' + options.reverse_merge!(null: true) + field :test_field, field_type, + authorize: field_authorizations, + resolve: -> (_, _, _) { resolved_value }, + **options end end let(:current_user) { double(:current_user) } subject(:service) { described_class.new(field) } - describe "#authorized_resolve" do - let(:presented_object) { double("presented object") } - let(:presented_type) { double("parent type", object: presented_object) } + describe '#authorized_resolve' do + let(:presented_object) { double('presented object') } + let(:presented_type) { double('parent type', object: presented_object) } subject(:resolved) { service.authorized_resolve.call(presented_type, {}, { current_user: current_user }) } - context "scalar types" do - shared_examples "checking permissions on the presented object" do - it "checks the abilities on the object being presented and returns the value" do + context 'scalar types' do + shared_examples 'checking permissions on the presented object' do + it 'checks the abilities on the object being presented and returns the value' do expected_permissions.each do |permission| spy_ability_check_for(permission, presented_object, passed: true) end - expect(resolved).to eq("Resolved value") + expect(resolved).to eq('Resolved value') end it "returns nil if the value wasn't authorized" do @@ -45,61 +49,71 @@ describe Gitlab::Graphql::Authorize::AuthorizeFieldService do end end - context "when the field is a built-in scalar type" do - let(:field) { type_with_field(GraphQL::STRING_TYPE, :read_field).fields["testField"].to_graphql } + context 'when the field is a built-in scalar type' do + let(:field) { type_with_field(GraphQL::STRING_TYPE, :read_field).fields['testField'].to_graphql } let(:expected_permissions) { [:read_field] } - it_behaves_like "checking permissions on the presented object" + it_behaves_like 'checking permissions on the presented object' end - context "when the field is a list of scalar types" do - let(:field) { type_with_field([GraphQL::STRING_TYPE], :read_field).fields["testField"].to_graphql } + context 'when the field is a list of scalar types' do + let(:field) { type_with_field([GraphQL::STRING_TYPE], :read_field).fields['testField'].to_graphql } let(:expected_permissions) { [:read_field] } - it_behaves_like "checking permissions on the presented object" + it_behaves_like 'checking permissions on the presented object' end - context "when the field is sub-classed scalar type" do - let(:field) { type_with_field(Types::TimeType, :read_field).fields["testField"].to_graphql } + context 'when the field is sub-classed scalar type' do + let(:field) { type_with_field(Types::TimeType, :read_field).fields['testField'].to_graphql } let(:expected_permissions) { [:read_field] } - it_behaves_like "checking permissions on the presented object" + it_behaves_like 'checking permissions on the presented object' end - context "when the field is a list of sub-classed scalar types" do - let(:field) { type_with_field([Types::TimeType], :read_field).fields["testField"].to_graphql } + context 'when the field is a list of sub-classed scalar types' do + let(:field) { type_with_field([Types::TimeType], :read_field).fields['testField'].to_graphql } let(:expected_permissions) { [:read_field] } - it_behaves_like "checking permissions on the presented object" + it_behaves_like 'checking permissions on the presented object' end end - context "when the field is a specific type" do + context 'when the field is a specific type' do let(:custom_type) { type(:read_type) } - let(:object_in_field) { double("presented in field") } - let(:field) { type_with_field(custom_type, :read_field, object_in_field).fields["testField"].to_graphql } + let(:object_in_field) { double('presented in field') } + let(:field) { type_with_field(custom_type, :read_field, object_in_field).fields['testField'].to_graphql } - it "checks both field & type permissions" do + it 'checks both field & type permissions' do spy_ability_check_for(:read_field, object_in_field, passed: true) spy_ability_check_for(:read_type, object_in_field, passed: true) expect(resolved).to eq(object_in_field) end - it "returns nil if viewing was not allowed" do + it 'returns nil if viewing was not allowed' do spy_ability_check_for(:read_field, object_in_field, passed: false) spy_ability_check_for(:read_type, object_in_field, passed: true) expect(resolved).to be_nil end - context "when the field is a list" do - let(:object_1) { double("presented in field 1") } - let(:object_2) { double("presented in field 2") } + context 'when the field is not nullable' do + let(:field) { type_with_field(custom_type, [], object_in_field, null: false).fields['testField'].to_graphql } + + it 'returns nil when viewing is not allowed' do + spy_ability_check_for(:read_type, object_in_field, passed: false) + + expect(resolved).to be_nil + end + end + + context 'when the field is a list' do + let(:object_1) { double('presented in field 1') } + let(:object_2) { double('presented in field 2') } let(:presented_types) { [double(object: object_1), double(object: object_2)] } - let(:field) { type_with_field([custom_type], :read_field, presented_types).fields["testField"].to_graphql } + let(:field) { type_with_field([custom_type], :read_field, presented_types).fields['testField'].to_graphql } - it "checks all permissions" do + it 'checks all permissions' do allow(Ability).to receive(:allowed?) { true } spy_ability_check_for(:read_field, object_1, passed: true) @@ -110,7 +124,7 @@ describe Gitlab::Graphql::Authorize::AuthorizeFieldService do expect(resolved).to eq(presented_types) end - it "filters out objects that the user cannot see" do + it 'filters out objects that the user cannot see' do allow(Ability).to receive(:allowed?) { true } spy_ability_check_for(:read_type, object_1, passed: false) diff --git a/spec/lib/gitlab/issuable_metadata_spec.rb b/spec/lib/gitlab/issuable_metadata_spec.rb index 916f3876a8e..032467b8b4e 100644 --- a/spec/lib/gitlab/issuable_metadata_spec.rb +++ b/spec/lib/gitlab/issuable_metadata_spec.rb @@ -7,11 +7,11 @@ describe Gitlab::IssuableMetadata do subject { Class.new { include Gitlab::IssuableMetadata }.new } it 'returns an empty Hash if an empty collection is provided' do - expect(subject.issuable_meta_data(Issue.none, 'Issue')).to eq({}) + expect(subject.issuable_meta_data(Issue.none, 'Issue', user)).to eq({}) end it 'raises an error when given a collection with no limit' do - expect { subject.issuable_meta_data(Issue.all, 'Issue') }.to raise_error(/must have a limit/) + expect { subject.issuable_meta_data(Issue.all, 'Issue', user) }.to raise_error(/must have a limit/) end context 'issues' do @@ -23,7 +23,7 @@ describe Gitlab::IssuableMetadata do let!(:closing_issues) { create(:merge_requests_closing_issues, issue: issue, merge_request: merge_request) } it 'aggregates stats on issues' do - data = subject.issuable_meta_data(Issue.all.limit(10), 'Issue') + data = subject.issuable_meta_data(Issue.all.limit(10), 'Issue', user) expect(data.count).to eq(2) expect(data[issue.id].upvotes).to eq(1) @@ -46,7 +46,7 @@ describe Gitlab::IssuableMetadata do let!(:note) { create(:note_on_merge_request, author: user, project: project, noteable: merge_request, note: "a comment on a MR") } it 'aggregates stats on merge requests' do - data = subject.issuable_meta_data(MergeRequest.all.limit(10), 'MergeRequest') + data = subject.issuable_meta_data(MergeRequest.all.limit(10), 'MergeRequest', user) expect(data.count).to eq(2) expect(data[merge_request.id].upvotes).to eq(1) diff --git a/spec/routing/uploads_routing_spec.rb b/spec/routing/uploads_routing_spec.rb index 6a041ffdd6c..42e84774088 100644 --- a/spec/routing/uploads_routing_spec.rb +++ b/spec/routing/uploads_routing_spec.rb @@ -12,10 +12,19 @@ describe 'Uploads', 'routing' do ) end + it 'allows creating uploads for users' do + expect(post('/uploads/user?id=1')).to route_to( + controller: 'uploads', + action: 'create', + model: 'user', + id: '1' + ) + end + it 'does not allow creating uploads for other models' do - UploadsController::MODEL_CLASSES.keys.compact.each do |model| - next if model == 'personal_snippet' + unroutable_models = UploadsController::MODEL_CLASSES.keys.compact - %w(personal_snippet user) + unroutable_models.each do |model| expect(post("/uploads/#{model}?id=1")).not_to be_routable end end diff --git a/spec/services/projects/propagate_service_template_spec.rb b/spec/services/projects/propagate_service_template_spec.rb index f93e5aae82a..2c3effec617 100644 --- a/spec/services/projects/propagate_service_template_spec.rb +++ b/spec/services/projects/propagate_service_template_spec.rb @@ -72,7 +72,7 @@ describe Projects::PropagateServiceTemplate do expect(project.pushover_service.properties).to eq(service_template.properties) end - describe 'bulk update' do + describe 'bulk update', :use_sql_query_cache do let(:project_total) { 5 } before do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9266bee34d6..ec17bee640d 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -215,6 +215,12 @@ RSpec.configure do |config| ActionController::Base.cache_store = caching_store end + config.around(:each, :use_sql_query_cache) do |example| + ActiveRecord::Base.cache do + example.run + end + end + # The :each scope runs "inside" the example, so this hook ensures the DB is in the # correct state before any examples' before hooks are called. This prevents a # problem where `ScheduleIssuesClosedAtTypeChange` (or any migration that depends diff --git a/spec/support/shared_examples/requests/api/issues/merge_requests_count_shared_examples.rb b/spec/support/shared_examples/requests/api/issues/merge_requests_count_shared_examples.rb new file mode 100644 index 00000000000..5f4e178f2e5 --- /dev/null +++ b/spec/support/shared_examples/requests/api/issues/merge_requests_count_shared_examples.rb @@ -0,0 +1,37 @@ +def get_issue + json_response.is_a?(Array) ? json_response.detect {|issue| issue['id'] == target_issue.id} : json_response +end + +shared_examples 'accessible merge requests count' do + it 'returns anonymous accessible merge requests count' do + get api(api_url), params: { scope: 'all' } + + issue = get_issue + expect(issue).not_to be_nil + expect(issue['merge_requests_count']).to eq(1) + end + + it 'returns guest accessible merge requests count' do + get api(api_url, guest), params: { scope: 'all' } + + issue = get_issue + expect(issue).not_to be_nil + expect(issue['merge_requests_count']).to eq(1) + end + + it 'returns reporter accessible merge requests count' do + get api(api_url, user), params: { scope: 'all' } + + issue = get_issue + expect(issue).not_to be_nil + expect(issue['merge_requests_count']).to eq(2) + end + + it 'returns admin accessible merge requests count' do + get api(api_url, admin), params: { scope: 'all' } + + issue = get_issue + expect(issue).not_to be_nil + expect(issue['merge_requests_count']).to eq(2) + end +end diff --git a/spec/uploaders/file_mover_spec.rb b/spec/uploaders/file_mover_spec.rb index e474a714b10..d5e8a90cecd 100644 --- a/spec/uploaders/file_mover_spec.rb +++ b/spec/uploaders/file_mover_spec.rb @@ -3,20 +3,29 @@ require 'spec_helper' describe FileMover do include FileMoverHelpers + let(:user) { create(:user) } let(:filename) { 'banana_sample.gif' } - let(:temp_file_path) { File.join('uploads/-/system/temp', 'secret55', filename) } + let(:secret) { 'secret55' } + let(:temp_file_path) { File.join("uploads/-/system/user/#{user.id}", secret, filename) } let(:temp_description) do "test ![banana_sample](/#{temp_file_path}) "\ "same ![banana_sample](/#{temp_file_path}) " end - let(:file_path) { File.join('uploads/-/system/personal_snippet', snippet.id.to_s, 'secret55', filename) } + let(:file_path) { File.join('uploads/-/system/personal_snippet', snippet.id.to_s, secret, filename) } let(:snippet) { create(:personal_snippet, description: temp_description) } - subject { described_class.new(temp_file_path, snippet).execute } + let(:tmp_uploader) do + PersonalFileUploader.new(user, secret: secret) + end + + let(:file) { fixture_file_upload('spec/fixtures/banana_sample.gif') } + subject { described_class.new(temp_file_path, from_model: user, to_model: snippet).execute } describe '#execute' do before do + tmp_uploader.store!(file) + expect(FileUtils).to receive(:mkdir_p).with(a_string_including(File.dirname(file_path))) expect(FileUtils).to receive(:move).with(a_string_including(temp_file_path), a_string_including(file_path)) allow_any_instance_of(CarrierWave::SanitizedFile).to receive(:exists?).and_return(true) @@ -25,6 +34,8 @@ describe FileMover do stub_file_mover(temp_file_path) end + let(:tmp_upload) { tmp_uploader.upload } + context 'when move and field update successful' do it 'updates the description correctly' do subject @@ -36,8 +47,10 @@ describe FileMover do ) end - it 'creates a new update record' do - expect { subject }.to change { Upload.count }.by(1) + it 'updates existing upload record' do + expect { subject } + .to change { tmp_upload.reload.attributes.values_at('model_id', 'model_type') } + .from([user.id, 'User']).to([snippet.id, 'PersonalSnippet']) end it 'schedules a background migration' do @@ -52,30 +65,31 @@ describe FileMover do expect(FileUtils).to receive(:move).with(a_string_including(file_path), a_string_including(temp_file_path)) end - subject { described_class.new(file_path, snippet, :non_existing_field).execute } + subject { described_class.new(file_path, :non_existing_field, from_model: user, to_model: snippet).execute } it 'does not update the description' do subject expect(snippet.reload.description) .to eq( - "test ![banana_sample](/uploads/-/system/temp/secret55/banana_sample.gif) "\ - "same ![banana_sample](/uploads/-/system/temp/secret55/banana_sample.gif) " + "test ![banana_sample](/uploads/-/system/user/#{user.id}/secret55/banana_sample.gif) "\ + "same ![banana_sample](/uploads/-/system/user/#{user.id}/secret55/banana_sample.gif) " ) end - it 'does not create a new update record' do - expect { subject }.not_to change { Upload.count } + it 'does not change the upload record' do + expect { subject } + .not_to change { tmp_upload.reload.attributes.values_at('model_id', 'model_type') } end end end context 'security' do context 'when relative path is involved' do - let(:temp_file_path) { File.join('uploads/-/system/temp', '..', 'another_subdir_of_temp') } + let(:temp_file_path) { File.join("uploads/-/system/user/#{user.id}", '..', 'another_subdir_of_temp') } it 'does not trigger move if path is outside designated directory' do - stub_file_mover('uploads/-/system/another_subdir_of_temp') + stub_file_mover("uploads/-/system/user/#{user.id}/another_subdir_of_temp") expect(FileUtils).not_to receive(:move) subject diff --git a/spec/validators/color_validator_spec.rb b/spec/validators/color_validator_spec.rb new file mode 100644 index 00000000000..e5a38ac9372 --- /dev/null +++ b/spec/validators/color_validator_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe ColorValidator do + using RSpec::Parameterized::TableSyntax + + subject do + Class.new do + include ActiveModel::Model + include ActiveModel::Validations + attr_accessor :color + validates :color, color: true + end.new + end + + where(:color, :is_valid) do + '#000abc' | true + '#aaa' | true + '#BBB' | true + '#cCc' | true + '#ffff' | false + '#000111222' | false + 'invalid' | false + '000' | false + end + + with_them do + it 'only accepts valid colors' do + subject.color = color + + expect(subject.valid?).to eq(is_valid) + end + end + + it 'fails fast for long invalid string' do + subject.color = '#' + ('0' * 50_000) + 'xxx' + + expect do + Timeout.timeout(5.seconds) { subject.valid? } + end.not_to raise_error + end +end |