Date: Fri, 29 Sep 2017 14:02:27 -0400
Subject: [PATCH 228/263] Fix incorrectly aligned last updated time
---
app/assets/javascripts/repo/components/repo_file.vue | 2 +-
app/assets/javascripts/repo/components/repo_sidebar.vue | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/assets/javascripts/repo/components/repo_file.vue b/app/assets/javascripts/repo/components/repo_file.vue
index 20ebf840774..8b9cbd23456 100644
--- a/app/assets/javascripts/repo/components/repo_file.vue
+++ b/app/assets/javascripts/repo/components/repo_file.vue
@@ -95,7 +95,7 @@ export default RepoFile;
- |
+ |
diff --git a/app/assets/javascripts/repo/components/repo_sidebar.vue b/app/assets/javascripts/repo/components/repo_sidebar.vue
index dc1bda95a01..1e40814b95f 100644
--- a/app/assets/javascripts/repo/components/repo_sidebar.vue
+++ b/app/assets/javascripts/repo/components/repo_sidebar.vue
@@ -75,7 +75,7 @@ export default {
| Name |
Last Commit |
- Last Update |
+ Last Update |
From a212391f0fc5e2d021ade4c0219c079e0832e18e Mon Sep 17 00:00:00 2001
From: Tim Bishop
Date: Tue, 19 Sep 2017 18:57:01 +0100
Subject: [PATCH 229/263] Make GPG validation case insensitive.
In line with other changes in GitLab, make email address validation
properly case insensitive. The email address in the commit may be in
any case, so it needs downcasing to match the address stored in GitLab
for the user. Without this change the comparison fails and commits are
not marked as verified.
See #37009.
---
app/models/gpg_key.rb | 2 +-
changelogs/unreleased/fix-gpg-case-insensitive.yml | 5 +++++
spec/models/gpg_key_spec.rb | 8 ++++++++
3 files changed, 14 insertions(+), 1 deletion(-)
create mode 100644 changelogs/unreleased/fix-gpg-case-insensitive.yml
diff --git a/app/models/gpg_key.rb b/app/models/gpg_key.rb
index 44deae4234b..54bd5b68777 100644
--- a/app/models/gpg_key.rb
+++ b/app/models/gpg_key.rb
@@ -73,7 +73,7 @@ class GpgKey < ActiveRecord::Base
end
def verified_and_belongs_to_email?(email)
- emails_with_verified_status.fetch(email, false)
+ emails_with_verified_status.fetch(email.downcase, false)
end
def update_invalid_gpg_signatures
diff --git a/changelogs/unreleased/fix-gpg-case-insensitive.yml b/changelogs/unreleased/fix-gpg-case-insensitive.yml
new file mode 100644
index 00000000000..744ec00a4a8
--- /dev/null
+++ b/changelogs/unreleased/fix-gpg-case-insensitive.yml
@@ -0,0 +1,5 @@
+---
+title: Compare email addresses case insensitively when verifying GPG signatures
+merge_request: 14376
+author: Tim Bishop
+type: fixed
diff --git a/spec/models/gpg_key_spec.rb b/spec/models/gpg_key_spec.rb
index fadc8bfeb61..4a4d079b721 100644
--- a/spec/models/gpg_key_spec.rb
+++ b/spec/models/gpg_key_spec.rb
@@ -138,6 +138,14 @@ describe GpgKey do
expect(gpg_key.verified?).to be_truthy
expect(gpg_key.verified_and_belongs_to_email?('bette.cartwright@example.com')).to be_truthy
end
+
+ it 'returns true if one of the email addresses in the key belongs to the user and case-insensitively matches the provided email' do
+ user = create :user, email: 'bette.cartwright@example.com'
+ gpg_key = create :gpg_key, key: GpgHelpers::User2.public_key, user: user
+
+ expect(gpg_key.verified?).to be_truthy
+ expect(gpg_key.verified_and_belongs_to_email?('Bette.Cartwright@example.com')).to be_truthy
+ end
end
describe '#revoke' do
From 7dac9624bc19019f7432cf12ac8713a5dad03b69 Mon Sep 17 00:00:00 2001
From: Brian Neel
Date: Fri, 29 Sep 2017 17:34:47 -0400
Subject: [PATCH 230/263] Remove lock reason and add guard clause
---
app/controllers/sessions_controller.rb | 4 +++-
app/models/user.rb | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index fc0c0024ad7..90bf6c51699 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -46,7 +46,9 @@ class SessionsController < Devise::SessionsController
private
def log_failed_login
- Gitlab::AppLogger.info("Failed Login: username=#{user_params[:login]} ip=#{request.remote_ip}") if failed_login?
+ return unless failed_login?
+
+ Gitlab::AppLogger.info("Failed Login: username=#{user_params[:login]} ip=#{request.remote_ip}")
end
def failed_login?
diff --git a/app/models/user.rb b/app/models/user.rb
index 195490c95c7..cbfd07d0098 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1063,7 +1063,7 @@ class User < ActiveRecord::Base
# override, from Devise
def lock_access!
- Gitlab::AppLogger.info("Account Locked: username=#{username} reason=invalid_login_attempts")
+ Gitlab::AppLogger.info("Account Locked: username=#{username}")
super
end
From 999b7e553b1e1e04c2be4289b94557813f140cfe Mon Sep 17 00:00:00 2001
From: David Turner
Date: Thu, 21 Sep 2017 16:40:17 -0400
Subject: [PATCH 231/263] remove unused from_gitaly method
---
lib/gitlab/git/user.rb | 4 ----
1 file changed, 4 deletions(-)
diff --git a/lib/gitlab/git/user.rb b/lib/gitlab/git/user.rb
index ea634d39668..e142992f324 100644
--- a/lib/gitlab/git/user.rb
+++ b/lib/gitlab/git/user.rb
@@ -7,10 +7,6 @@ module Gitlab
new(gitlab_user.name, gitlab_user.email, Gitlab::GlId.gl_id(gitlab_user))
end
- def self.from_gitaly(gitaly_user)
- new(gitaly_user.name, gitaly_user.email, gitaly_user.gl_id)
- end
-
def initialize(name, email, gl_id)
@name = name
@email = email
From dbcf48af8b21c0f1e54b73ea421911028081e1c1 Mon Sep 17 00:00:00 2001
From: David Turner
Date: Wed, 2 Aug 2017 14:14:50 -0400
Subject: [PATCH 232/263] Add username as GL_USERNAME in hooks (http)
When calling pre-receive, post-receive, and update hooks, add the GitLab
username as the GL_USERNAME environment variable.
This patch only handles cases where pushes are over http, or via
the web interface. Later, we will address the ssh case.
---
changelogs/unreleased/remote_user.yml | 4 ++++
lib/gitlab/git/hook.rb | 18 ++++++++++++------
lib/gitlab/git/hooks_service.rb | 15 ++++++++-------
lib/gitlab/git/user.rb | 9 +++++----
spec/lib/gitlab/git/hook_spec.rb | 8 +++++---
spec/lib/gitlab/git/hooks_service_spec.rb | 2 +-
spec/lib/gitlab/git/user_spec.rb | 18 ++++++++++--------
spec/lib/gitlab/workhorse_spec.rb | 14 ++++++++++++--
spec/models/repository_spec.rb | 6 +++---
9 files changed, 60 insertions(+), 34 deletions(-)
create mode 100644 changelogs/unreleased/remote_user.yml
diff --git a/changelogs/unreleased/remote_user.yml b/changelogs/unreleased/remote_user.yml
new file mode 100644
index 00000000000..75a941fa95f
--- /dev/null
+++ b/changelogs/unreleased/remote_user.yml
@@ -0,0 +1,4 @@
+---
+title: Add username as GL_USERNAME in hooks
+merge_request:
+author:
diff --git a/lib/gitlab/git/hook.rb b/lib/gitlab/git/hook.rb
index 208e4bbaf60..8ccb3e64636 100644
--- a/lib/gitlab/git/hook.rb
+++ b/lib/gitlab/git/hook.rb
@@ -22,22 +22,22 @@ module Gitlab
File.exist?(path)
end
- def trigger(gl_id, oldrev, newrev, ref)
+ def trigger(gl_id, gl_username, oldrev, newrev, ref)
return [true, nil] unless exists?
Bundler.with_clean_env do
case name
when "pre-receive", "post-receive"
- call_receive_hook(gl_id, oldrev, newrev, ref)
+ call_receive_hook(gl_id, gl_username, oldrev, newrev, ref)
when "update"
- call_update_hook(gl_id, oldrev, newrev, ref)
+ call_update_hook(gl_id, gl_username, oldrev, newrev, ref)
end
end
end
private
- def call_receive_hook(gl_id, oldrev, newrev, ref)
+ def call_receive_hook(gl_id, gl_username, oldrev, newrev, ref)
changes = [oldrev, newrev, ref].join(" ")
exit_status = false
@@ -45,6 +45,7 @@ module Gitlab
vars = {
'GL_ID' => gl_id,
+ 'GL_USERNAME' => gl_username,
'PWD' => repo_path,
'GL_PROTOCOL' => GL_PROTOCOL,
'GL_REPOSITORY' => repository.gl_repository
@@ -80,9 +81,14 @@ module Gitlab
[exit_status, exit_message]
end
- def call_update_hook(gl_id, oldrev, newrev, ref)
+ def call_update_hook(gl_id, gl_username, oldrev, newrev, ref)
Dir.chdir(repo_path) do
- stdout, stderr, status = Open3.capture3({ 'GL_ID' => gl_id }, path, ref, oldrev, newrev)
+ stdout, stderr, status = Open3.capture3(
+ {
+ 'GL_ID' => gl_id,
+ 'GL_USERNAME' => gl_username
+ },
+ path, ref, oldrev, newrev)
[status.success?, (stderr.presence || stdout).gsub(/\R/, " ").html_safe]
end
end
diff --git a/lib/gitlab/git/hooks_service.rb b/lib/gitlab/git/hooks_service.rb
index ea8a87a1290..c327e9b1616 100644
--- a/lib/gitlab/git/hooks_service.rb
+++ b/lib/gitlab/git/hooks_service.rb
@@ -5,12 +5,13 @@ module Gitlab
attr_accessor :oldrev, :newrev, :ref
- def execute(committer, repository, oldrev, newrev, ref)
- @repository = repository
- @gl_id = committer.gl_id
- @oldrev = oldrev
- @newrev = newrev
- @ref = ref
+ def execute(pusher, repository, oldrev, newrev, ref)
+ @repository = repository
+ @gl_id = pusher.gl_id
+ @gl_username = pusher.name
+ @oldrev = oldrev
+ @newrev = newrev
+ @ref = ref
%w(pre-receive update).each do |hook_name|
status, message = run_hook(hook_name)
@@ -29,7 +30,7 @@ module Gitlab
def run_hook(name)
hook = Gitlab::Git::Hook.new(name, @repository)
- hook.trigger(@gl_id, oldrev, newrev, ref)
+ hook.trigger(@gl_id, @gl_username, oldrev, newrev, ref)
end
end
end
diff --git a/lib/gitlab/git/user.rb b/lib/gitlab/git/user.rb
index e142992f324..cb1af5f3b7c 100644
--- a/lib/gitlab/git/user.rb
+++ b/lib/gitlab/git/user.rb
@@ -1,20 +1,21 @@
module Gitlab
module Git
class User
- attr_reader :name, :email, :gl_id
+ attr_reader :username, :name, :email, :gl_id
def self.from_gitlab(gitlab_user)
- new(gitlab_user.name, gitlab_user.email, Gitlab::GlId.gl_id(gitlab_user))
+ new(gitlab_user.username, gitlab_user.name, gitlab_user.email, Gitlab::GlId.gl_id(gitlab_user))
end
- def initialize(name, email, gl_id)
+ def initialize(username, name, email, gl_id)
+ @username = username
@name = name
@email = email
@gl_id = gl_id
end
def ==(other)
- [name, email, gl_id] == [other.name, other.email, other.gl_id]
+ [username, name, email, gl_id] == [other.username, other.name, other.email, other.gl_id]
end
end
end
diff --git a/spec/lib/gitlab/git/hook_spec.rb b/spec/lib/gitlab/git/hook_spec.rb
index 0ff4f3bd105..2fe1f5603ce 100644
--- a/spec/lib/gitlab/git/hook_spec.rb
+++ b/spec/lib/gitlab/git/hook_spec.rb
@@ -14,6 +14,7 @@ describe Gitlab::Git::Hook do
let(:repo_path) { repository.path }
let(:user) { create(:user) }
let(:gl_id) { Gitlab::GlId.gl_id(user) }
+ let(:gl_username) { user.username }
def create_hook(name)
FileUtils.mkdir_p(File.join(repo_path, 'hooks'))
@@ -42,6 +43,7 @@ describe Gitlab::Git::Hook do
let(:env) do
{
'GL_ID' => gl_id,
+ 'GL_USERNAME' => gl_username,
'PWD' => repo_path,
'GL_PROTOCOL' => 'web',
'GL_REPOSITORY' => gl_repository
@@ -59,7 +61,7 @@ describe Gitlab::Git::Hook do
.with(env, hook_path, chdir: repo_path).and_call_original
end
- status, errors = hook.trigger(gl_id, blank, blank, ref)
+ status, errors = hook.trigger(gl_id, gl_username, blank, blank, ref)
expect(status).to be true
expect(errors).to be_blank
end
@@ -72,7 +74,7 @@ describe Gitlab::Git::Hook do
blank = Gitlab::Git::BLANK_SHA
ref = Gitlab::Git::BRANCH_REF_PREFIX + 'new_branch'
- status, errors = hook.trigger(gl_id, blank, blank, ref)
+ status, errors = hook.trigger(gl_id, gl_username, blank, blank, ref)
expect(status).to be false
expect(errors).to eq("error message from the hook error message from the hook line 2 ")
end
@@ -86,7 +88,7 @@ describe Gitlab::Git::Hook do
blank = Gitlab::Git::BLANK_SHA
ref = Gitlab::Git::BRANCH_REF_PREFIX + 'new_branch'
- status, errors = hook.trigger(gl_id, blank, blank, ref)
+ status, errors = hook.trigger(gl_id, gl_username, blank, blank, ref)
expect(status).to be true
expect(errors).to be_nil
end
diff --git a/spec/lib/gitlab/git/hooks_service_spec.rb b/spec/lib/gitlab/git/hooks_service_spec.rb
index d4d75b66659..51e4e3fdad1 100644
--- a/spec/lib/gitlab/git/hooks_service_spec.rb
+++ b/spec/lib/gitlab/git/hooks_service_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'
describe Gitlab::Git::HooksService, seed_helper: true do
- let(:user) { Gitlab::Git::User.new('Jane Doe', 'janedoe@example.com', 'user-456') }
+ let(:user) { Gitlab::Git::User.new('janedoe', 'Jane Doe', 'janedoe@example.com', 'user-456') }
let(:repository) { Gitlab::Git::Repository.new('default', TEST_REPO_PATH, 'project-123') }
let(:service) { described_class.new }
diff --git a/spec/lib/gitlab/git/user_spec.rb b/spec/lib/gitlab/git/user_spec.rb
index 0ebcecb26c0..ab64b041187 100644
--- a/spec/lib/gitlab/git/user_spec.rb
+++ b/spec/lib/gitlab/git/user_spec.rb
@@ -1,22 +1,24 @@
require 'spec_helper'
describe Gitlab::Git::User do
+ let(:username) { 'janedo' }
let(:name) { 'Jane Doe' }
let(:email) { 'janedoe@example.com' }
let(:gl_id) { 'user-123' }
- subject { described_class.new(name, email, gl_id) }
+ subject { described_class.new(username, name, email, gl_id) }
describe '#==' do
- def eq_other(name, email, gl_id)
- eq(described_class.new(name, email, gl_id))
+ def eq_other(username, name, email, gl_id)
+ eq(described_class.new(username, name, email, gl_id))
end
- it { expect(subject).to eq_other(name, email, gl_id) }
+ it { expect(subject).to eq_other(username, name, email, gl_id) }
- it { expect(subject).not_to eq_other(nil, nil, nil) }
- it { expect(subject).not_to eq_other(name + 'x', email, gl_id) }
- it { expect(subject).not_to eq_other(name, email + 'x', gl_id) }
- it { expect(subject).not_to eq_other(name, email, gl_id + 'x') }
+ it { expect(subject).not_to eq_other(nil, nil, nil, nil) }
+ it { expect(subject).not_to eq_other(username + 'x', name, email, gl_id) }
+ it { expect(subject).not_to eq_other(username, name + 'x', email, gl_id) }
+ it { expect(subject).not_to eq_other(username, name, email + 'x', gl_id) }
+ it { expect(subject).not_to eq_other(username, name, email, gl_id + 'x') }
end
end
diff --git a/spec/lib/gitlab/workhorse_spec.rb b/spec/lib/gitlab/workhorse_spec.rb
index 5708aa6754f..e56e2df8376 100644
--- a/spec/lib/gitlab/workhorse_spec.rb
+++ b/spec/lib/gitlab/workhorse_spec.rb
@@ -182,7 +182,12 @@ describe Gitlab::Workhorse do
let(:repo_path) { repository.path_to_repo }
let(:action) { 'info_refs' }
let(:params) do
- { GL_ID: "user-#{user.id}", GL_REPOSITORY: "project-#{project.id}", RepoPath: repo_path }
+ {
+ GL_ID: "user-#{user.id}",
+ GL_USERNAME: user.username,
+ GL_REPOSITORY: "project-#{project.id}",
+ RepoPath: repo_path
+ }
end
subject { described_class.git_http_ok(repository, false, user, action) }
@@ -191,7 +196,12 @@ describe Gitlab::Workhorse do
context 'when is_wiki' do
let(:params) do
- { GL_ID: "user-#{user.id}", GL_REPOSITORY: "wiki-#{project.id}", RepoPath: repo_path }
+ {
+ GL_ID: "user-#{user.id}",
+ GL_USERNAME: user.username,
+ GL_REPOSITORY: "wiki-#{project.id}",
+ RepoPath: repo_path
+ }
end
subject { described_class.git_http_ok(repository, true, user, action) }
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index ab81d39691b..869cf51f6a2 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -1679,11 +1679,11 @@ describe Repository do
tag_sha = tag.target
expect(pre_receive_hook).to have_received(:trigger)
- .with(anything, anything, commit_sha, anything)
+ .with(anything, anything, anything, commit_sha, anything)
expect(update_hook).to have_received(:trigger)
- .with(anything, anything, commit_sha, anything)
+ .with(anything, anything, anything, commit_sha, anything)
expect(post_receive_hook).to have_received(:trigger)
- .with(anything, anything, tag_sha, anything)
+ .with(anything, anything, anything, tag_sha, anything)
end
end
end
From 01ce58bde4ddb9bdf3c54dbd2cc65f7a6b81661e Mon Sep 17 00:00:00 2001
From: David Turner
Date: Thu, 3 Aug 2017 14:38:33 -0400
Subject: [PATCH 233/263] add username to authorized result, so that
gitlab-shell can pass it to hooks
---
GITLAB_SHELL_VERSION | 3 ++-
lib/api/internal.rb | 7 +++++++
lib/gitlab/git/hook.rb | 11 +++++------
lib/gitlab/workhorse.rb | 2 +-
4 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION
index da902181863..5508e17c23b 100644
--- a/GITLAB_SHELL_VERSION
+++ b/GITLAB_SHELL_VERSION
@@ -1 +1,2 @@
-5.9.2
+5.9.3
+
diff --git a/lib/api/internal.rb b/lib/api/internal.rb
index a0557a609ca..6e78ac2c903 100644
--- a/lib/api/internal.rb
+++ b/lib/api/internal.rb
@@ -31,6 +31,12 @@ module API
protocol = params[:protocol]
actor.update_last_used_at if actor.is_a?(Key)
+ user =
+ if actor.is_a?(Key)
+ actor.user
+ else
+ actor
+ end
access_checker_klass = wiki? ? Gitlab::GitAccessWiki : Gitlab::GitAccess
access_checker = access_checker_klass
@@ -47,6 +53,7 @@ module API
{
status: true,
gl_repository: gl_repository,
+ gl_username: user&.username,
repository_path: repository_path,
gitaly: gitaly_payload(params[:action])
}
diff --git a/lib/gitlab/git/hook.rb b/lib/gitlab/git/hook.rb
index 8ccb3e64636..e29a1f7afa1 100644
--- a/lib/gitlab/git/hook.rb
+++ b/lib/gitlab/git/hook.rb
@@ -83,12 +83,11 @@ module Gitlab
def call_update_hook(gl_id, gl_username, oldrev, newrev, ref)
Dir.chdir(repo_path) do
- stdout, stderr, status = Open3.capture3(
- {
- 'GL_ID' => gl_id,
- 'GL_USERNAME' => gl_username
- },
- path, ref, oldrev, newrev)
+ env = {
+ 'GL_ID' => gl_id,
+ 'GL_USERNAME' => gl_username
+ }
+ stdout, stderr, status = Open3.capture3(env, path, ref, oldrev, newrev)
[status.success?, (stderr.presence || stdout).gsub(/\R/, " ").html_safe]
end
end
diff --git a/lib/gitlab/workhorse.rb b/lib/gitlab/workhorse.rb
index 17550cf9074..45f246242f1 100644
--- a/lib/gitlab/workhorse.rb
+++ b/lib/gitlab/workhorse.rb
@@ -22,9 +22,9 @@ module Gitlab
params = {
GL_ID: Gitlab::GlId.gl_id(user),
GL_REPOSITORY: Gitlab::GlRepository.gl_repository(project, is_wiki),
+ GL_USERNAME: user&.username,
RepoPath: repo_path
}
-
server = {
address: Gitlab::GitalyClient.address(project.repository_storage),
token: Gitlab::GitalyClient.token(project.repository_storage)
From f3f304dc06231b7fb5af71607a5a61574bd9a0ac Mon Sep 17 00:00:00 2001
From: Stan Hu
Date: Fri, 29 Sep 2017 15:10:36 -0700
Subject: [PATCH 234/263] Ensure all refs are restored on a restore from backup
To restore all refs from a bundle, we need to use the --mirror option to
ensure that all refs are properly restored. Without this, refs such as
`refs/merge-requests/X` and `refs/keep-around/Y` would be omitted, which
exposed a bug as described in https://gitlab.com/gitlab-org/gitlab-ce/issues/38319#note_41648608.
Closes #38352
---
changelogs/unreleased/sh-restore-all-refs-backup.yml | 5 +++++
lib/backup/repository.rb | 2 +-
2 files changed, 6 insertions(+), 1 deletion(-)
create mode 100644 changelogs/unreleased/sh-restore-all-refs-backup.yml
diff --git a/changelogs/unreleased/sh-restore-all-refs-backup.yml b/changelogs/unreleased/sh-restore-all-refs-backup.yml
new file mode 100644
index 00000000000..eaac0c71dd0
--- /dev/null
+++ b/changelogs/unreleased/sh-restore-all-refs-backup.yml
@@ -0,0 +1,5 @@
+---
+title: Ensure all refs are restored on a restore from backup
+merge_request:
+author:
+type: fixed
diff --git a/lib/backup/repository.rb b/lib/backup/repository.rb
index 4e92be85110..3ad09a1b421 100644
--- a/lib/backup/repository.rb
+++ b/lib/backup/repository.rb
@@ -78,7 +78,7 @@ module Backup
project.ensure_storage_path_exists
cmd = if File.exist?(path_to_project_bundle)
- %W(#{Gitlab.config.git.bin_path} clone --bare #{path_to_project_bundle} #{path_to_project_repo})
+ %W(#{Gitlab.config.git.bin_path} clone --bare --mirror #{path_to_project_bundle} #{path_to_project_repo})
else
%W(#{Gitlab.config.git.bin_path} init --bare #{path_to_project_repo})
end
From 80957f7404d6741427dc225aba4df2d000fa129f Mon Sep 17 00:00:00 2001
From: Ben Bodenmiller
Date: Sat, 30 Sep 2017 03:02:42 +0000
Subject: [PATCH 235/263] remove period
[skip ci]
---
doc/user/admin_area/monitoring/health_check.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/user/admin_area/monitoring/health_check.md b/doc/user/admin_area/monitoring/health_check.md
index 70934f9960a..843fb4ce26b 100644
--- a/doc/user/admin_area/monitoring/health_check.md
+++ b/doc/user/admin_area/monitoring/health_check.md
@@ -18,7 +18,7 @@ traffic until the system is ready or restart the container as needed.
To access monitoring resources, the client IP needs to be included in a whitelist.
-[Read how to add IPs to a whitelist for the monitoring endpoints.][admin].
+[Read how to add IPs to a whitelist for the monitoring endpoints][admin].
## Using the endpoint
From a97ff8aae09054f1394da18097bacb5b10a5d809 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Rodr=C3=ADguez?=
Date: Wed, 20 Sep 2017 19:28:57 -0300
Subject: [PATCH 236/263] Add a factory for `Gitaly::GitCommit`s
---
spec/factories/gitaly/commit.rb | 17 ++++++++++++++
spec/factories/gitaly/commit_author.rb | 9 ++++++++
spec/lib/gitlab/git/commit_spec.rb | 32 ++++----------------------
3 files changed, 31 insertions(+), 27 deletions(-)
create mode 100644 spec/factories/gitaly/commit.rb
create mode 100644 spec/factories/gitaly/commit_author.rb
diff --git a/spec/factories/gitaly/commit.rb b/spec/factories/gitaly/commit.rb
new file mode 100644
index 00000000000..e7966cee77b
--- /dev/null
+++ b/spec/factories/gitaly/commit.rb
@@ -0,0 +1,17 @@
+FactoryGirl.define do
+ sequence(:gitaly_commit_id) { Digest::SHA1.hexdigest(Time.now.to_f.to_s) }
+
+ factory :gitaly_commit, class: Gitaly::GitCommit do
+ skip_create
+
+ id { generate(:gitaly_commit_id) }
+ parent_ids do
+ ids = [generate(:gitaly_commit_id), generate(:gitaly_commit_id)]
+ Google::Protobuf::RepeatedField.new(:string, ids)
+ end
+ subject { "My commit" }
+ body { subject + "\nMy body" }
+ author { build(:gitaly_commit_author) }
+ committer { build(:gitaly_commit_author) }
+ end
+end
diff --git a/spec/factories/gitaly/commit_author.rb b/spec/factories/gitaly/commit_author.rb
new file mode 100644
index 00000000000..341873a2002
--- /dev/null
+++ b/spec/factories/gitaly/commit_author.rb
@@ -0,0 +1,9 @@
+FactoryGirl.define do
+ factory :gitaly_commit_author, class: Gitaly::CommitAuthor do
+ skip_create
+
+ name { generate(:name) }
+ email { generate(:email) }
+ date { Google::Protobuf::Timestamp.new(seconds: Time.now.to_i) }
+ end
+end
diff --git a/spec/lib/gitlab/git/commit_spec.rb b/spec/lib/gitlab/git/commit_spec.rb
index a3dff6d0d4b..3815055139a 100644
--- a/spec/lib/gitlab/git/commit_spec.rb
+++ b/spec/lib/gitlab/git/commit_spec.rb
@@ -65,34 +65,12 @@ describe Gitlab::Git::Commit, seed_helper: true do
end
describe "Commit info from gitaly commit" do
- let(:id) { 'f00' }
- let(:parent_ids) { %w(b45 b46) }
let(:subject) { "My commit".force_encoding('ASCII-8BIT') }
let(:body) { subject + "My body".force_encoding('ASCII-8BIT') }
- let(:committer) do
- Gitaly::CommitAuthor.new(
- name: generate(:name),
- email: generate(:email),
- date: Google::Protobuf::Timestamp.new(seconds: 123)
- )
- end
- let(:author) do
- Gitaly::CommitAuthor.new(
- name: generate(:name),
- email: generate(:email),
- date: Google::Protobuf::Timestamp.new(seconds: 456)
- )
- end
- let(:gitaly_commit) do
- Gitaly::GitCommit.new(
- id: id,
- subject: subject,
- body: body,
- author: author,
- committer: committer,
- parent_ids: parent_ids
- )
- end
+ let(:gitaly_commit) { build(:gitaly_commit, subject: subject, body: body) }
+ let(:id) { gitaly_commit.id }
+ let(:committer) { gitaly_commit.committer }
+ let(:author) { gitaly_commit.author }
let(:commit) { described_class.new(repository, gitaly_commit) }
it { expect(commit.short_id).to eq(id[0..10]) }
@@ -104,7 +82,7 @@ describe Gitlab::Git::Commit, seed_helper: true do
it { expect(commit.author_name).to eq(author.name) }
it { expect(commit.committer_name).to eq(committer.name) }
it { expect(commit.committer_email).to eq(committer.email) }
- it { expect(commit.parent_ids).to eq(parent_ids) }
+ it { expect(commit.parent_ids).to eq(gitaly_commit.parent_ids) }
context 'no body' do
let(:body) { "".force_encoding('ASCII-8BIT') }
From 16f850033fa557d86e5f561001f5f67e17a132bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Rodr=C3=ADguez?=
Date: Wed, 20 Sep 2017 19:33:56 -0300
Subject: [PATCH 237/263] Populate `Gitlay::Repository`'s `gl_repository` field
---
lib/gitlab/git/repository.rb | 2 +-
lib/gitlab/gitaly_client/util.rb | 3 +-
spec/lib/gitlab/gitaly_client/util_spec.rb | 43 ++++++++++++++++++++++
spec/lib/gitlab/workhorse_spec.rb | 3 +-
4 files changed, 48 insertions(+), 3 deletions(-)
create mode 100644 spec/lib/gitlab/gitaly_client/util_spec.rb
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb
index ef76245a608..9ea5ed04b13 100644
--- a/lib/gitlab/git/repository.rb
+++ b/lib/gitlab/git/repository.rb
@@ -1062,7 +1062,7 @@ module Gitlab
end
def gitaly_repository
- Gitlab::GitalyClient::Util.repository(@storage, @relative_path)
+ Gitlab::GitalyClient::Util.repository(@storage, @relative_path, @gl_repository)
end
def gitaly_operations_client
diff --git a/lib/gitlab/gitaly_client/util.rb b/lib/gitlab/gitaly_client/util.rb
index 2fb5875a7a2..da43c616b94 100644
--- a/lib/gitlab/gitaly_client/util.rb
+++ b/lib/gitlab/gitaly_client/util.rb
@@ -2,10 +2,11 @@ module Gitlab
module GitalyClient
module Util
class << self
- def repository(repository_storage, relative_path)
+ def repository(repository_storage, relative_path, gl_repository)
Gitaly::Repository.new(
storage_name: repository_storage,
relative_path: relative_path,
+ gl_repository: gl_repository,
git_object_directory: Gitlab::Git::Env['GIT_OBJECT_DIRECTORY'].to_s,
git_alternate_object_directories: Array.wrap(Gitlab::Git::Env['GIT_ALTERNATE_OBJECT_DIRECTORIES'])
)
diff --git a/spec/lib/gitlab/gitaly_client/util_spec.rb b/spec/lib/gitlab/gitaly_client/util_spec.rb
new file mode 100644
index 00000000000..498f6886bee
--- /dev/null
+++ b/spec/lib/gitlab/gitaly_client/util_spec.rb
@@ -0,0 +1,43 @@
+require 'spec_helper'
+
+describe Gitlab::GitalyClient::Util do
+ describe '.repository' do
+ let(:repository_storage) { 'default' }
+ let(:relative_path) { 'my/repo.git' }
+ let(:gl_repository) { 'project-1' }
+ let(:git_object_directory) { '.git/objects' }
+ let(:git_alternate_object_directory) { '/dir/one:/dir/two' }
+
+ subject do
+ described_class.repository(repository_storage, relative_path, gl_repository)
+ end
+
+ it 'creates a Gitaly::Repository with the given data' do
+ expect(Gitlab::Git::Env).to receive(:[]).with('GIT_OBJECT_DIRECTORY')
+ .and_return(git_object_directory)
+ expect(Gitlab::Git::Env).to receive(:[]).with('GIT_ALTERNATE_OBJECT_DIRECTORIES')
+ .and_return(git_alternate_object_directory)
+
+ expect(subject).to be_a(Gitaly::Repository)
+ expect(subject.storage_name).to eq(repository_storage)
+ expect(subject.relative_path).to eq(relative_path)
+ expect(subject.gl_repository).to eq(gl_repository)
+ expect(subject.git_object_directory).to eq(git_object_directory)
+ expect(subject.git_alternate_object_directories).to eq([git_alternate_object_directory])
+ end
+ end
+
+ describe '.gitaly_user' do
+ let(:user) { create(:user) }
+ let(:gl_id) { Gitlab::GlId.gl_id(user) }
+
+ subject { described_class.gitaly_user(user) }
+
+ it 'creates a Gitaly::User from a GitLab user' do
+ expect(subject).to be_a(Gitaly::User)
+ expect(subject.name).to eq(user.name)
+ expect(subject.email).to eq(user.email)
+ expect(subject.gl_id).to eq(gl_id)
+ end
+ end
+end
diff --git a/spec/lib/gitlab/workhorse_spec.rb b/spec/lib/gitlab/workhorse_spec.rb
index 5708aa6754f..5f4d69224eb 100644
--- a/spec/lib/gitlab/workhorse_spec.rb
+++ b/spec/lib/gitlab/workhorse_spec.rb
@@ -216,7 +216,8 @@ describe Gitlab::Workhorse do
it 'includes a Repository param' do
repo_param = {
storage_name: 'default',
- relative_path: project.full_path + '.git'
+ relative_path: project.full_path + '.git',
+ gl_repository: "project-#{project.id}"
}
expect(subject[:Repository]).to include(repo_param)
From fa5f0164eba8a03ba4fa1403849f3996577fd2e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Rodr=C3=ADguez?=
Date: Wed, 20 Sep 2017 19:34:30 -0300
Subject: [PATCH 238/263] Implement OperationService.UserAddBranch Gitaly RPC
---
lib/gitlab/git/repository.rb | 34 ++++++--
lib/gitlab/gitaly_client/operation_service.rb | 20 +++++
.../gitaly_client/operation_service_spec.rb | 55 +++++++++++++
spec/models/repository_spec.rb | 77 ++++++++++++-------
4 files changed, 153 insertions(+), 33 deletions(-)
create mode 100644 spec/lib/gitlab/gitaly_client/operation_service_spec.rb
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb
index 9ea5ed04b13..22b735c6f7b 100644
--- a/lib/gitlab/git/repository.rb
+++ b/lib/gitlab/git/repository.rb
@@ -656,13 +656,13 @@ module Gitlab
end
def add_branch(branch_name, user:, target:)
- target_object = Ref.dereference_object(lookup(target))
- raise InvalidRef.new("target not found: #{target}") unless target_object
-
- OperationService.new(user, self).add_branch(branch_name, target_object.oid)
- find_branch(branch_name)
- rescue Rugged::ReferenceError => ex
- raise InvalidRef, ex
+ gitaly_migrate(:operation_user_create_branch) do |is_enabled|
+ if is_enabled
+ gitaly_add_branch(branch_name, user, target)
+ else
+ rugged_add_branch(branch_name, user, target)
+ end
+ end
end
def add_tag(tag_name, user:, target:, message: nil)
@@ -1081,6 +1081,10 @@ module Gitlab
@gitaly_repository_client ||= Gitlab::GitalyClient::RepositoryService.new(self)
end
+ def gitaly_operation_client
+ @gitaly_operation_client ||= Gitlab::GitalyClient::OperationService.new(self)
+ end
+
def gitaly_migrate(method, status: Gitlab::GitalyClient::MigrationStatus::OPT_IN, &block)
Gitlab::GitalyClient.migrate(method, status: status, &block)
rescue GRPC::NotFound => e
@@ -1472,6 +1476,22 @@ module Gitlab
file.write(gitattributes_content)
end
end
+
+ def gitaly_add_branch(branch_name, user, target)
+ gitaly_operation_client.user_create_branch(branch_name, user, target)
+ rescue GRPC::FailedPrecondition => ex
+ raise InvalidRef, ex
+ end
+
+ def rugged_add_branch(branch_name, user, target)
+ target_object = Ref.dereference_object(lookup(target))
+ raise InvalidRef.new("target not found: #{target}") unless target_object
+
+ OperationService.new(user, self).add_branch(branch_name, target_object.oid)
+ find_branch(branch_name)
+ rescue Rugged::ReferenceError
+ raise InvalidRef, ex
+ end
end
end
end
diff --git a/lib/gitlab/gitaly_client/operation_service.rb b/lib/gitlab/gitaly_client/operation_service.rb
index 2d5440e7ea8..46bd5c18603 100644
--- a/lib/gitlab/gitaly_client/operation_service.rb
+++ b/lib/gitlab/gitaly_client/operation_service.rb
@@ -40,6 +40,26 @@ module Gitlab
rescue GRPC::FailedPrecondition => e
raise Gitlab::Git::Repository::InvalidRef, e
end
+
+ def user_create_branch(branch_name, user, start_point)
+ request = Gitaly::UserCreateBranchRequest.new(
+ repository: @gitaly_repo,
+ branch_name: GitalyClient.encode(branch_name),
+ user: Util.gitaly_user(user),
+ start_point: GitalyClient.encode(start_point)
+ )
+ response = GitalyClient.call(@repository.storage, :operation_service,
+ :user_create_branch, request)
+ if response.pre_receive_error.present?
+ raise Gitlab::Git::HooksService::PreReceiveError.new(response.pre_receive_error)
+ end
+
+ branch = response.branch
+ return nil unless branch
+
+ target_commit = Gitlab::Git::Commit.decorate(@repository, branch.target_commit)
+ Gitlab::Git::Branch.new(@repository, branch.name, target_commit.id, target_commit)
+ end
end
end
end
diff --git a/spec/lib/gitlab/gitaly_client/operation_service_spec.rb b/spec/lib/gitlab/gitaly_client/operation_service_spec.rb
new file mode 100644
index 00000000000..769b14687ac
--- /dev/null
+++ b/spec/lib/gitlab/gitaly_client/operation_service_spec.rb
@@ -0,0 +1,55 @@
+require 'spec_helper'
+
+describe Gitlab::GitalyClient::OperationService do
+ let(:project) { create(:project) }
+ let(:repository) { project.repository.raw }
+ let(:client) { described_class.new(repository) }
+
+ describe '#user_create_branch' do
+ let(:user) { create(:user) }
+ let(:gitaly_user) { Gitlab::GitalyClient::Util.gitaly_user(user) }
+ let(:branch_name) { 'new' }
+ let(:start_point) { 'master' }
+ let(:request) do
+ Gitaly::UserCreateBranchRequest.new(
+ repository: repository.gitaly_repository,
+ branch_name: branch_name,
+ start_point: start_point,
+ user: gitaly_user
+ )
+ end
+ let(:gitaly_commit) { build(:gitaly_commit) }
+ let(:commit_id) { gitaly_commit.id }
+ let(:gitaly_branch) do
+ Gitaly::Branch.new(name: branch_name, target_commit: gitaly_commit)
+ end
+ let(:response) { Gitaly::UserCreateBranchResponse.new(branch: gitaly_branch) }
+ let(:commit) { Gitlab::Git::Commit.new(repository, gitaly_commit) }
+
+ subject { client.user_create_branch(branch_name, user, start_point) }
+
+ it 'sends a user_create_branch message and returns a Gitlab::git::Branch' do
+ expect_any_instance_of(Gitaly::OperationService::Stub)
+ .to receive(:user_create_branch).with(request, kind_of(Hash))
+ .and_return(response)
+
+ expect(subject.name).to eq(branch_name)
+ expect(subject.dereferenced_target).to eq(commit)
+ end
+
+ context "when pre_receive_error is present" do
+ let(:response) do
+ Gitaly::UserCreateBranchResponse.new(pre_receive_error: "something failed")
+ end
+
+ it "throws a PreReceive exception" do
+ expect_any_instance_of(Gitaly::OperationService::Stub)
+ .to receive(:user_create_branch).with(request, kind_of(Hash))
+ .and_return(response)
+
+ expect { subject }.to raise_error(
+ Gitlab::Git::HooksService::PreReceiveError, "something failed")
+ end
+ end
+ end
+end
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index ab81d39691b..7b562583f37 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -815,45 +815,70 @@ describe Repository do
end
describe '#add_branch' do
- context 'when pre hooks were successful' do
- it 'runs without errors' do
- hook = double(trigger: [true, nil])
- expect(Gitlab::Git::Hook).to receive(:new).exactly(3).times.and_return(hook)
+ let(:branch_name) { 'new_feature' }
+ let(:target) { 'master' }
- expect { repository.add_branch(user, 'new_feature', 'master') }.not_to raise_error
+ subject { repository.add_branch(user, branch_name, target) }
+
+ context 'with Gitaly enabled' do
+ it "calls Gitaly's OperationService" do
+ expect_any_instance_of(Gitlab::GitalyClient::OperationService)
+ .to receive(:user_create_branch).with(branch_name, user, target)
+ .and_return(nil)
+
+ subject
end
- it 'creates the branch' do
- allow_any_instance_of(Gitlab::Git::Hook).to receive(:trigger).and_return([true, nil])
-
- branch = repository.add_branch(user, 'new_feature', 'master')
-
- expect(branch.name).to eq('new_feature')
+ it 'creates_the_branch' do
+ expect(subject.name).to eq(branch_name)
+ expect(repository.find_branch(branch_name)).not_to be_nil
end
- it 'calls the after_create_branch hook' do
- expect(repository).to receive(:after_create_branch)
+ context 'with a non-existing target' do
+ let(:target) { 'fake-target' }
- repository.add_branch(user, 'new_feature', 'master')
+ it "returns false and doesn't create the branch" do
+ expect(subject).to be(false)
+ expect(repository.find_branch(branch_name)).to be_nil
+ end
end
end
- context 'when pre hooks failed' do
- it 'gets an error' do
- allow_any_instance_of(Gitlab::Git::Hook).to receive(:trigger).and_return([false, ''])
+ context 'with Gitaly disabled', skip_gitaly_mock: true do
+ context 'when pre hooks were successful' do
+ it 'runs without errors' do
+ hook = double(trigger: [true, nil])
+ expect(Gitlab::Git::Hook).to receive(:new).exactly(3).times.and_return(hook)
- expect do
- repository.add_branch(user, 'new_feature', 'master')
- end.to raise_error(Gitlab::Git::HooksService::PreReceiveError)
+ expect { subject }.not_to raise_error
+ end
+
+ it 'creates the branch' do
+ allow_any_instance_of(Gitlab::Git::Hook).to receive(:trigger).and_return([true, nil])
+
+ expect(subject.name).to eq(branch_name)
+ end
+
+ it 'calls the after_create_branch hook' do
+ expect(repository).to receive(:after_create_branch)
+
+ subject
+ end
end
- it 'does not create the branch' do
- allow_any_instance_of(Gitlab::Git::Hook).to receive(:trigger).and_return([false, ''])
+ context 'when pre hooks failed' do
+ it 'gets an error' do
+ allow_any_instance_of(Gitlab::Git::Hook).to receive(:trigger).and_return([false, ''])
- expect do
- repository.add_branch(user, 'new_feature', 'master')
- end.to raise_error(Gitlab::Git::HooksService::PreReceiveError)
- expect(repository.find_branch('new_feature')).to be_nil
+ expect { subject }.to raise_error(Gitlab::Git::HooksService::PreReceiveError)
+ end
+
+ it 'does not create the branch' do
+ allow_any_instance_of(Gitlab::Git::Hook).to receive(:trigger).and_return([false, ''])
+
+ expect { subject }.to raise_error(Gitlab::Git::HooksService::PreReceiveError)
+ expect(repository.find_branch(branch_name)).to be_nil
+ end
end
end
end
From 018771516ea360bdc02cdc6659a0fd5c881c7350 Mon Sep 17 00:00:00 2001
From: Stan Hu
Date: Fri, 29 Sep 2017 21:21:31 -0700
Subject: [PATCH 239/263] Fix Admin -> License selector for GitLab QA specs
Closes gitlab-qa#68
---
qa/qa/page/admin/menu.rb | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/qa/qa/page/admin/menu.rb b/qa/qa/page/admin/menu.rb
index b01a4e10f93..f4619042e34 100644
--- a/qa/qa/page/admin/menu.rb
+++ b/qa/qa/page/admin/menu.rb
@@ -3,15 +3,10 @@ module QA
module Admin
class Menu < Page::Base
def go_to_license
- within_middle_menu { click_link 'License' }
- end
-
- private
-
- def within_middle_menu
- page.within('.nav-control') do
- yield
- end
+ link = find_link 'License'
+ # Click space to scroll this link into the view
+ link.send_keys(:space)
+ link.click
end
end
end
From 98bfbd49ac3be6a767ab19ac5c6a89eb090ee3ab Mon Sep 17 00:00:00 2001
From: Joshua Lambert
Date: Sat, 30 Sep 2017 02:28:47 -0400
Subject: [PATCH 240/263] updates
---
doc/install/kubernetes/gitlab_chart.md | 9 ++++++---
doc/install/kubernetes/index.md | 12 +++++++-----
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/doc/install/kubernetes/gitlab_chart.md b/doc/install/kubernetes/gitlab_chart.md
index 177124c8291..ddfd47df099 100644
--- a/doc/install/kubernetes/gitlab_chart.md
+++ b/doc/install/kubernetes/gitlab_chart.md
@@ -1,8 +1,13 @@
# GitLab Helm Chart
> **Note**:
-* This chart will be replaced by the [gitlab-omnibus](gitlab_omnibus.md) chart, once it supports [additional configuration options](https://gitlab.com/charts/charts.gitlab.io/issues/68).
+* This chart will be replaced by the [gitlab-omnibus](gitlab_omnibus.md) chart, once it supports [additional configuration options](https://gitlab.com/charts/charts.gitlab.io/issues/68). For more information on available charts, please see our [overview](index.md#chart-overview).
* These charts have been tested on Google Container Engine and Azure Container Service. Other Kubernetes installations may work as well, if not please [open an issue](https://gitlab.com/charts/charts.gitlab.io/issues).
+
+For more information on available GitLab Helm Charts, please see our [overview](index.md#chart-overview).
+
+## Introduction
+
The `gitlab` Helm chart deploys just GitLab into your Kubernetes cluster, and offers extensive configuration options. This chart requires advanced knowledge of Kubernetes to successfully use. For most deployments we **strongly recommended** the [gitlab-omnibus](gitlab_omnibus.md) chart, which will replace this chart once it supports [additional configuration options](https://gitlab.com/charts/charts.gitlab.io/issues/68). Due to the difficulty in supporting upgrades to the `omnibus-gitlab` chart, migrating will require exporting data out of this instance and importing it into the new deployment.
This chart includes the following:
@@ -15,8 +20,6 @@ This chart includes the following:
- Optional PostgreSQL deployment using the [PostgreSQL Chart](https://github.com/kubernetes/charts/tree/master/stable/postgresql) (defaults to enabled)
- Optional Ingress (defaults to disabled)
-For more information on available GitLab Helm Charts, please see our [overview](index.md#chart-overview).
-
## Prerequisites
- _At least_ 3 GB of RAM available on your cluster. 41GB of storage and 2 CPU are also required.
diff --git a/doc/install/kubernetes/index.md b/doc/install/kubernetes/index.md
index 467d5b92e0c..f7720998e62 100644
--- a/doc/install/kubernetes/index.md
+++ b/doc/install/kubernetes/index.md
@@ -9,8 +9,8 @@ should be deployed, upgraded, and configured.
## Chart Overview
-* **[GitLab-Omnibus](#gitlab-omnibus-chart-recommended)**: The best way to run GitLab on Kubernetes today. It is suited for small to medium deployments, and is in beta while support for backups and other features are added.
-* **[Upcoming Cloud Native Charts](#upcoming-cloud-native-helm-charts)**: The next generation of charts, currently in development. Will support large deployments, with horizontal scaling of individual GitLab components.
+* **[GitLab-Omnibus](gitlab_omnibus.md)**: The best way to run GitLab on Kubernetes today. It is suited for small to medium deployments, and is in beta while support for backups and other features are added.
+* **[Cloud Native Charts](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md)**: The next generation of charts, currently in development. Will support large deployments, with horizontal scaling of individual GitLab components.
* Other Charts
* [GitLab Runner Chart](#gitlab-runner-chart): For deploying just the GitLab Runner.
* [Advanced GitLab Installation](#advanced-gitlab-installation): Provides additional deployment options, but provides less functionality out-of-the-box. It's beta, no longer actively developed, and will be deprecated by [gitlab-omnibus](#gitlab-omnibus-chart-recommended) once it supports these options.
@@ -25,9 +25,9 @@ Once the [cloud native charts](#upcoming-cloud-native-helm-charts) are ready for
Learn more about the [gitlab-omnibus chart.](gitlab_omnibus.md)
-## Upcoming Cloud Native Charts
+## Cloud Native Charts
-GitLab is working towards building a [cloud native deployment method](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md). A key part of this effort is to isolate each service into its [own Docker container and Helm chart](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2420), rather than utilizing the all-in-one container image of the [current charts](#official-gitlab-helm-charts-recommended).
+GitLab is working towards building a [cloud native GitLab chart](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md). A key part of this effort is to isolate each service into its [own Docker container and Helm chart](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2420), rather than utilizing the all-in-one container image of the [current charts](#official-gitlab-helm-charts-recommended).
By offering individual containers and charts, we will be able to provide a number of benefits:
* Easier horizontal scaling of each service,
@@ -37,6 +37,8 @@ By offering individual containers and charts, we will be able to provide a numbe
This is a large project and will be worked on over the span of multiple releases. For the most up-to-date status and release information, please see our [tracking issue](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2420). We do not expect these to be production ready before the second half of 2018.
+Learn more about the [cloud native GitLab chart.](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md)
+
## Other Charts
### GitLab Runner Chart
@@ -55,7 +57,7 @@ Learn more about the [gitlab chart.](gitlab_chart.md)
### Community Contributed Charts
-The community has also [contributed GitLab charts](https://github.com/kubernetes/charts/tree/master/stable/gitlab-ce) to the [Helm Stable Repository](https://github.com/kubernetes/charts#repository-structure). These charts should be considered [deprecated](https://github.com/kubernetes/charts/issues/1138) in favor of the [official Charts](#official-gitlab-helm-charts-recommended).
+The community has also contributed GitLab [CE]((https://github.com/kubernetes/charts/tree/master/stable/gitlab-ce)) and [EE]((https://github.com/kubernetes/charts/tree/master/stable/gitlab-ce)) charts to the [Helm Stable Repository](https://github.com/kubernetes/charts#repository-structure). These charts should be considered [deprecated](https://github.com/kubernetes/charts/issues/1138) in favor of the [official Charts](gitlab_omnibus.md).
[chart]: https://github.com/kubernetes/charts
[helm]: https://github.com/kubernetes/helm/blob/master/README.md
From 5d46236f7615859ddc1c3591169e1d0dd39b4597 Mon Sep 17 00:00:00 2001
From: Stan Hu
Date: Fri, 29 Sep 2017 23:38:12 -0700
Subject: [PATCH 241/263] Add GitLab QA documentation
[ci skip]
---
qa/README.md | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/qa/README.md b/qa/README.md
index b6b5a76f1d3..e0ebb53a2e9 100644
--- a/qa/README.md
+++ b/qa/README.md
@@ -16,3 +16,22 @@ against any existing instance.
1. When we release a new version of GitLab, we build a Docker images for it.
1. Along with GitLab Docker Images we also build and publish GitLab QA images.
1. GitLab QA project uses these images to execute integration tests.
+
+## How can I use it?
+
+You can use GitLab QA to exercise tests on any live instance! For example, the
+follow call would login to the local GitLab instance and run all specs in
+`qa/specs/features`:
+
+```
+GITLAB_USERNAME='root' GITLAB_PASSWORD='5iveL!fe' bin/qa Test::Instance http://localhost
+```
+
+You can also supply a specific tests to run as another parameter. For example, to
+test the EE license specs, you can run:
+
+```
+EE_LICENSE="" GITLAB_USERNAME='root' GITLAB_PASSWORD='5iveL!fe' bin/qa Test::Instance http://localhost qa/ee
+```
+
+All [supported environment variables are here](https://gitlab.com/gitlab-org/gitlab-qa#supported-environment-variables).
From 2146d6253fadfec82e58d66e59b9ec50fdf3d761 Mon Sep 17 00:00:00 2001
From: Andrew Newdigate
Date: Sat, 30 Sep 2017 16:26:23 +0000
Subject: [PATCH 242/263] Add environment variable to bypass n+1
---
doc/development/gitaly.md | 32 +++++++++++++++++++++++++++++++-
lib/gitlab/gitaly_client.rb | 2 +-
2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/doc/development/gitaly.md b/doc/development/gitaly.md
index f0be3a6b141..e41d258bec6 100644
--- a/doc/development/gitaly.md
+++ b/doc/development/gitaly.md
@@ -12,6 +12,7 @@ status of the migration.
Gitaly makes heavy use of [feature flags](feature_flags.md).
Each Rugged-to-Gitaly migration goes through a [series of phases](https://gitlab.com/gitlab-org/gitaly/blob/master/doc/MIGRATION_PROCESS.md):
+
* **Opt-In**: by default the Rugged implementation is used.
* Production instances can choose to enable the Gitaly endpoint by enabling the feature flag.
* For testing purposes, you may wish to enable all feature flags by default. This can be done by exporting the following
@@ -19,7 +20,7 @@ Each Rugged-to-Gitaly migration goes through a [series of phases](https://gitlab
* On developer instances (ie, when `Rails.env.development?` is true), the Gitaly endpoint
is enabled by default, but can be _disabled_ using feature flags.
* **Opt-Out**: by default, the Gitaly endpoint is used, but the feature can be explicitly disabled using the feature flag.
-* **Madatory**: The migration is complete and cannot be disabled. The old codepath is removed.
+* **Mandatory**: The migration is complete and cannot be disabled. The old codepath is removed.
### Enabling and Disabling Feature
@@ -49,6 +50,35 @@ If your test-suite is failing with Gitaly issues, as a first step, try running:
rm -rf tmp/tests/gitaly
```
+## `TooManyInvocationsError` errors
+
+During development and testing, you may experience `Gitlab::GitalyClient::TooManyInvocationsError` failures.
+The `GitalyClient` will attempt to block against potential n+1 issues by raising this error
+when Gitaly is called more than 30 times in a single Rails request or Sidekiq execution.
+
+As a temporary measure, export `GITALY_DISABLE_REQUEST_LIMITS=1` to suppress the error. This will disable the n+1 detection
+in your development environment.
+
+Please raise an issue in the GitLab CE or EE repositories to report the issue. Include the labels ~Gitaly
+~performance ~"technical debt". Please ensure that the issue contains the full stack trace and error message of the
+`TooManyInvocationsError`. Also include any known failing tests if possible.
+
+Isolate the source of the n+1 problem. This will normally be a loop that results in Gitaly being called for each
+element in an array. If you are unable to isolate the problem, please contact a member
+of the [Gitaly Team](https://gitlab.com/groups/gl-gitaly/group_members) for assistance.
+
+Once the source has been found, wrap it in an `allow_n_plus_1_calls` block, as follows:
+
+```ruby
+# n+1: link to n+1 issue
+Gitlab::GitalyClient.allow_n_plus_1_calls do
+ # original code
+ commits.each { |commit| ... }
+end
+```
+
+Once the code is wrapped in this block, this code-path will be excluded from n+1 detection.
+
---
[Return to Development documentation](README.md)
diff --git a/lib/gitlab/gitaly_client.rb b/lib/gitlab/gitaly_client.rb
index 955d2307f88..e75e0500ed8 100644
--- a/lib/gitlab/gitaly_client.rb
+++ b/lib/gitlab/gitaly_client.rb
@@ -151,7 +151,7 @@ module Gitlab
actual_call_count = increment_call_count("gitaly_#{call_site}_actual")
# Do no enforce limits in production
- return if Rails.env.production?
+ return if Rails.env.production? || ENV["GITALY_DISABLE_REQUEST_LIMITS"]
# Check if this call is nested within a allow_n_plus_1_calls
# block and skip check if it is
From 654b635c584b63f817f542f73a036c6093560dab Mon Sep 17 00:00:00 2001
From: Joshua Lambert
Date: Sat, 30 Sep 2017 13:32:39 -0400
Subject: [PATCH 243/263] Fix dead link
---
doc/install/kubernetes/index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/install/kubernetes/index.md b/doc/install/kubernetes/index.md
index f7720998e62..ce87608c242 100644
--- a/doc/install/kubernetes/index.md
+++ b/doc/install/kubernetes/index.md
@@ -57,7 +57,7 @@ Learn more about the [gitlab chart.](gitlab_chart.md)
### Community Contributed Charts
-The community has also contributed GitLab [CE]((https://github.com/kubernetes/charts/tree/master/stable/gitlab-ce)) and [EE]((https://github.com/kubernetes/charts/tree/master/stable/gitlab-ce)) charts to the [Helm Stable Repository](https://github.com/kubernetes/charts#repository-structure). These charts should be considered [deprecated](https://github.com/kubernetes/charts/issues/1138) in favor of the [official Charts](gitlab_omnibus.md).
+The community has also contributed GitLab [CE](https://github.com/kubernetes/charts/tree/master/stable/gitlab-ce) and [EE](https://github.com/kubernetes/charts/tree/master/stable/gitlab-ee) charts to the [Helm Stable Repository](https://github.com/kubernetes/charts#repository-structure). These charts should be considered [deprecated](https://github.com/kubernetes/charts/issues/1138) in favor of the [official Charts](gitlab_omnibus.md).
[chart]: https://github.com/kubernetes/charts
[helm]: https://github.com/kubernetes/helm/blob/master/README.md
From 1c46d27d9e2a15b483b3bdafdc81f292886f4fd9 Mon Sep 17 00:00:00 2001
From: Joshua Lambert
Date: Sat, 30 Sep 2017 13:35:13 -0400
Subject: [PATCH 244/263] updates
---
doc/install/kubernetes/index.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/doc/install/kubernetes/index.md b/doc/install/kubernetes/index.md
index ce87608c242..e79b8b2d759 100644
--- a/doc/install/kubernetes/index.md
+++ b/doc/install/kubernetes/index.md
@@ -12,8 +12,8 @@ should be deployed, upgraded, and configured.
* **[GitLab-Omnibus](gitlab_omnibus.md)**: The best way to run GitLab on Kubernetes today. It is suited for small to medium deployments, and is in beta while support for backups and other features are added.
* **[Cloud Native Charts](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md)**: The next generation of charts, currently in development. Will support large deployments, with horizontal scaling of individual GitLab components.
* Other Charts
- * [GitLab Runner Chart](#gitlab-runner-chart): For deploying just the GitLab Runner.
- * [Advanced GitLab Installation](#advanced-gitlab-installation): Provides additional deployment options, but provides less functionality out-of-the-box. It's beta, no longer actively developed, and will be deprecated by [gitlab-omnibus](#gitlab-omnibus-chart-recommended) once it supports these options.
+ * [GitLab Runner Chart](gitlab_runner_chart.md): For deploying just the GitLab Runner.
+ * [Advanced GitLab Installation](gitlab_chart.md): Provides additional deployment options, but provides less functionality out-of-the-box. It's beta, no longer actively developed, and will be deprecated by [gitlab-omnibus](#gitlab-omnibus-chart-recommended) once it supports these options.
* [Community Contributed Charts](#community-contributed-charts): Community contributed charts, deprecated by the official GitLab charts.
## GitLab-Omnibus Chart (Recommended)
@@ -25,7 +25,7 @@ Once the [cloud native charts](#upcoming-cloud-native-helm-charts) are ready for
Learn more about the [gitlab-omnibus chart.](gitlab_omnibus.md)
-## Cloud Native Charts
+## Cloud Native GitLab Chart
GitLab is working towards building a [cloud native GitLab chart](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md). A key part of this effort is to isolate each service into its [own Docker container and Helm chart](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2420), rather than utilizing the all-in-one container image of the [current charts](#official-gitlab-helm-charts-recommended).
From 2420ff749f8844b5b81cb67a55e3b488769a9842 Mon Sep 17 00:00:00 2001
From: Joshua Lambert
Date: Sat, 30 Sep 2017 13:48:35 -0400
Subject: [PATCH 245/263] minor cleanup
---
doc/install/kubernetes/index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/install/kubernetes/index.md b/doc/install/kubernetes/index.md
index e79b8b2d759..90b9e98455a 100644
--- a/doc/install/kubernetes/index.md
+++ b/doc/install/kubernetes/index.md
@@ -10,7 +10,7 @@ should be deployed, upgraded, and configured.
## Chart Overview
* **[GitLab-Omnibus](gitlab_omnibus.md)**: The best way to run GitLab on Kubernetes today. It is suited for small to medium deployments, and is in beta while support for backups and other features are added.
-* **[Cloud Native Charts](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md)**: The next generation of charts, currently in development. Will support large deployments, with horizontal scaling of individual GitLab components.
+* **[Cloud Native GitLab Chart](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md)**: The next generation of charts, currently in development. Will support large deployments, with horizontal scaling of individual GitLab components.
* Other Charts
* [GitLab Runner Chart](gitlab_runner_chart.md): For deploying just the GitLab Runner.
* [Advanced GitLab Installation](gitlab_chart.md): Provides additional deployment options, but provides less functionality out-of-the-box. It's beta, no longer actively developed, and will be deprecated by [gitlab-omnibus](#gitlab-omnibus-chart-recommended) once it supports these options.
From b2232f74129173f8d67340267d31962a82c1e37c Mon Sep 17 00:00:00 2001
From: robdel12
Date: Sat, 30 Sep 2017 18:33:12 -0500
Subject: [PATCH 246/263] Create failing test case
---
spec/features/signup_spec.rb | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/spec/features/signup_spec.rb b/spec/features/signup_spec.rb
index b6367b88e17..917fad74ef1 100644
--- a/spec/features/signup_spec.rb
+++ b/spec/features/signup_spec.rb
@@ -24,6 +24,24 @@ feature 'Signup' do
end
end
+ context "when sigining up with different cased emails" do
+ it "creates the user successfully" do
+ user = build(:user)
+
+ visit root_path
+
+ fill_in 'new_user_name', with: user.name
+ fill_in 'new_user_username', with: user.username
+ fill_in 'new_user_email', with: user.email
+ fill_in 'new_user_email_confirmation', with: user.email.capitalize
+ fill_in 'new_user_password', with: user.password
+ click_button "Register"
+
+ expect(current_path).to eq dashboard_projects_path
+ expect(page).to have_content("Welcome! You have signed up successfully.")
+ end
+ end
+
context "when not sending confirmation email" do
before do
stub_application_setting(send_user_confirmation_email: false)
From c82678ca76dc0f44eea165d73598454a01bf3be6 Mon Sep 17 00:00:00 2001
From: robdel12
Date: Sat, 30 Sep 2017 18:34:26 -0500
Subject: [PATCH 247/263] Add `:email_confirmation` to devise
`insensitive_keys`
This fixes a bug where the email confirmation input value is case
sensative. For example, if the email input is `myemail@example.com` and
the email confirmation input is `Myemail@example.com` the form would
fail to submit.
---
config/initializers/devise.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index 3aed2136f1b..0ba0d791054 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -36,7 +36,7 @@ Devise.setup do |config|
# Configure which authentication keys should be case-insensitive.
# These keys will be downcased upon creating or modifying a user and when used
# to authenticate or find a user. Default is :email.
- config.case_insensitive_keys = [:email]
+ config.case_insensitive_keys = [:email, :email_confirmation]
# Configure which authentication keys should have whitespace stripped.
# These keys will have whitespace before and after removed upon creating or
From de4e573564a8e0a25d3c0f6e111588a618441ab5 Mon Sep 17 00:00:00 2001
From: robdel12
Date: Sat, 30 Sep 2017 21:48:59 -0500
Subject: [PATCH 248/263] Add new changelog entry
---
.../unreleased/rd-fix-case-sensative-email-conf-signup.yml | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 changelogs/unreleased/rd-fix-case-sensative-email-conf-signup.yml
diff --git a/changelogs/unreleased/rd-fix-case-sensative-email-conf-signup.yml b/changelogs/unreleased/rd-fix-case-sensative-email-conf-signup.yml
new file mode 100644
index 00000000000..69695e403a9
--- /dev/null
+++ b/changelogs/unreleased/rd-fix-case-sensative-email-conf-signup.yml
@@ -0,0 +1,5 @@
+---
+title: Fix case sensitive email confirmation on signup
+merge_request: 14606
+author: robdel12
+type: fixed
From a7ad2fc608a9387858869c10b826093a13cdf3ef Mon Sep 17 00:00:00 2001
From: Douwe Maan
Date: Thu, 28 Sep 2017 10:50:24 +0000
Subject: [PATCH 249/263] Merge branch 'master-i18n' into 'master'
New Crowdin translations
See merge request gitlab-org/gitlab-ee!2947
---
locale/bg/gitlab.po | 334 +++++++++++++++++++++++---
locale/de/gitlab.po | 392 ++++++++++++++++++++++++++-----
locale/eo/gitlab.po | 334 +++++++++++++++++++++++---
locale/es/gitlab.po | 334 +++++++++++++++++++++++---
locale/fr/gitlab.po | 518 +++++++++++++++++++++++++++++++----------
locale/it/gitlab.po | 334 +++++++++++++++++++++++---
locale/ja/gitlab.po | 334 +++++++++++++++++++++++---
locale/ko/gitlab.po | 334 +++++++++++++++++++++++---
locale/nl_NL/gitlab.po | 428 ++++++++++++++++++++++++++++------
locale/pt_BR/gitlab.po | 334 +++++++++++++++++++++++---
locale/ru/gitlab.po | 480 ++++++++++++++++++++++++++++++--------
locale/uk/gitlab.po | 484 +++++++++++++++++++++++++++++---------
locale/zh_CN/gitlab.po | 402 +++++++++++++++++++++++++++-----
locale/zh_HK/gitlab.po | 334 +++++++++++++++++++++++---
locale/zh_TW/gitlab.po | 356 ++++++++++++++++++++++++----
15 files changed, 4936 insertions(+), 796 deletions(-)
diff --git a/locale/bg/gitlab.po b/locale/bg/gitlab.po
index 9d90f4ed5b1..38d63315fdc 100644
--- a/locale/bg/gitlab.po
+++ b/locale/bg/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:22-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:45-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Bulgarian\n"
"Language: bg_BG\n"
@@ -29,6 +29,9 @@ msgstr[1] "%s подавания бяха пропуснати, за да не
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_author_link} подаде %{commit_timeago}"
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr ""
@@ -51,6 +54,9 @@ msgid_plural "%d pipelines"
msgstr[0] "1 схема"
msgstr[1] "%d схеми"
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Набор от графики относно непрекъснатата интеграция"
@@ -93,7 +99,7 @@ msgstr "Добавяне на нова папка"
msgid "All"
msgstr ""
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
@@ -117,10 +123,34 @@ msgstr ""
msgid "Are you sure?"
msgstr ""
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Прикачете файл чрез влачене и пускане или %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -177,6 +207,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] "Клон"
@@ -194,6 +227,90 @@ msgstr "Превключване на клона"
msgid "Branches"
msgstr "Клонове"
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "Преглед на папката"
@@ -337,9 +454,6 @@ msgstr "Подадено от"
msgid "Compare"
msgstr "Сравнение"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "Ръководство за сътрудничество"
@@ -489,6 +603,9 @@ msgstr "Редактиране на плана %{id} за схема"
msgid "Emails"
msgstr ""
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr ""
@@ -516,6 +633,9 @@ msgstr "Всеки месец (на 1-во число, в 4 ч. сутринта
msgid "Every week (Sundays at 4:00am)"
msgstr "Всяка седмица (в неделя, в 4 ч. сутринта)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Собственикът не може да бъде променен"
@@ -572,7 +692,28 @@ msgstr "Към Вашето разклонение"
msgid "GoToYourFork|Fork"
msgstr "Разклонение"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
@@ -593,12 +734,6 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
-msgid "Home"
-msgstr "Начало"
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "Освежаването започна успешно"
@@ -620,6 +755,9 @@ msgstr ""
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "Изключено"
@@ -684,6 +822,9 @@ msgstr ""
msgid "Merge events"
msgstr ""
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr ""
@@ -812,6 +953,18 @@ msgstr ""
msgid "Owner"
msgstr "Собственик"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -917,10 +1070,7 @@ msgstr "с етапи"
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -953,12 +1103,6 @@ msgstr "Връзката към изнесените данни на проек
msgid "Project export started. A download link will be sent by email."
msgstr "Изнасянето на проекта започна. Ще получите връзка към данните по е-поща."
-msgid "Project home"
-msgstr "Начална страница на проекта"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr ""
@@ -983,27 +1127,30 @@ msgstr "Етап"
msgid "ProjectNetworkGraph|Graph"
msgstr "Графика"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr ""
@@ -1019,6 +1166,9 @@ msgstr "Клонове"
msgid "RefSwitcher|Tags"
msgstr "Етикети"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "Свързани подавания"
@@ -1073,6 +1223,9 @@ msgstr "Запазване на плана за схема"
msgid "Schedule a new pipeline"
msgstr "Създаване на нов план за схема"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "Планиране на схемите"
@@ -1112,6 +1265,12 @@ msgstr "зададете парола"
msgid "Settings"
msgstr ""
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "Показване на %d събитие"
@@ -1120,6 +1279,102 @@ msgstr[1] "Показване на %d събития"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "Изходен код"
@@ -1132,6 +1387,9 @@ msgstr ""
msgid "StarProject|Star"
msgstr "Звезда"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "Създайте %{new_merge_request} с тези промени"
@@ -1141,6 +1399,9 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "Преминаване към клон/етикет"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "Етикет"
@@ -1206,6 +1467,9 @@ msgstr "Стойността, която се намира в средата н
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Това означава, че няма да можете да изпращате код, докато не създадете празно хранилище или не внесете съществуващо такова."
@@ -1381,9 +1645,15 @@ msgstr ""
msgid "Use your global notification setting"
msgstr "Използване на глобалната Ви настройка за известията"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "Преглед на отворената заявка за сливане"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Вътрешен"
@@ -1456,6 +1726,12 @@ msgstr "Няма да можете да изтегляте или изпраща
msgid "Your name"
msgstr "Вашето име"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "ден"
diff --git a/locale/de/gitlab.po b/locale/de/gitlab.po
index 19961043ede..fc3c60166b7 100644
--- a/locale/de/gitlab.po
+++ b/locale/de/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:22-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:45-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: German\n"
"Language: de_DE\n"
@@ -18,8 +18,8 @@ msgstr ""
msgid "%d commit"
msgid_plural "%d commits"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d Commit"
+msgstr[1] "%d Commits"
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
@@ -27,6 +27,9 @@ msgstr[0] "%s zusätzlicher Commit wurde ausgelassen um Leistungsprobleme zu ver
msgstr[1] "%s zusätzliche Commits wurden ausgelassen um Leistungsprobleme zu verhindern."
msgid "%{commit_author_link} committed %{commit_timeago}"
+msgstr "%{commit_author_link} hat %{commit_timeago} committet"
+
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
msgstr ""
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
@@ -40,8 +43,8 @@ msgstr "%{number_of_failures} von %{maximum_failures} Fehlschlägen. GitLab wird
msgid "%{storage_name}: failed storage access attempt on host:"
msgid_plural "%{storage_name}: %{failed_attempts} failed storage access attempts:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%{storage_name}: fehlgeschlagener Speicherzugriff auf Host:"
+msgstr[1] "%{storage_name}: %{failed_attempts} fehlgeschlagene Speicherzugriffe:"
msgid "(checkout the %{link} for information on how to install it)."
msgstr "(beachte die Informationen zur Installation auf %{link})."
@@ -51,6 +54,9 @@ msgid_plural "%d pipelines"
msgstr[0] ""
msgstr[1] ""
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Eine Sammlung von Graphen bezüglich kontinuierlicher Integration"
@@ -67,13 +73,13 @@ msgid "Access to failing storages has been temporarily disabled to allow the mou
msgstr "Zugriff auf fehlerhafte Speicher wurde vorübergehend deaktiviert, um die Wiederherstellung zu ermöglichen. Für den zukünftigen Zugriff, behebe bitte das Problem und setze danach die Speicherinformationen zurück."
msgid "Account"
-msgstr ""
+msgstr "Konto"
msgid "Active"
msgstr "Aktiv"
msgid "Activity"
-msgstr ""
+msgstr "Aktivität"
msgid "Add Changelog"
msgstr "Änderungsliste hinzufügen "
@@ -93,8 +99,8 @@ msgstr "Erstelle eine neues Verzeichnis"
msgid "All"
msgstr "Alle"
-msgid "Appearances"
-msgstr "Erscheinungsbild"
+msgid "Appearance"
+msgstr ""
msgid "Applications"
msgstr "Anwendungen"
@@ -117,10 +123,34 @@ msgstr "Bist Du sicher, dass Du den Systemüberwachungstoken zurücksetzen wills
msgid "Are you sure?"
msgstr "Bist Du sicher?"
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Datei mittels Drag & Drop oder %{upload_link} hinzufügen"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -177,10 +207,13 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Zweig"
+msgstr[1] "Zweige"
msgid "Branch %{branch_name} was created. To set up auto deploy, choose a GitLab CI Yaml template and commit your changes. %{link_to_autodeploy_doc}"
msgstr "Branch %{branch_name} wurde erstellt. Um die automatische Bereitstellung einzurichten, wähle eine GitLab CI Yaml Vorlage und committe Deine Änderungen. %{link_to_autodeploy_doc}"
@@ -194,6 +227,90 @@ msgstr "Branch wechseln"
msgid "Branches"
msgstr ""
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "Verzeichnisse durchsuchen"
@@ -210,7 +327,7 @@ msgid "ByAuthor|by"
msgstr "von"
msgid "CI / CD"
-msgstr ""
+msgstr "CI / CD"
msgid "CI configuration"
msgstr "CI-Konfiguration"
@@ -240,7 +357,7 @@ msgid "Charts"
msgstr "Diagramme"
msgid "Chat"
-msgstr ""
+msgstr "Chat"
msgid "Cherry-pick this commit"
msgstr "Diesen Commit herauspicken "
@@ -307,8 +424,8 @@ msgstr "Kommentare"
msgid "Commit"
msgid_plural "Commits"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Commit"
+msgstr[1] "Commits"
msgid "Commit duration in minutes for last 30 commits"
msgstr "Dauer der Commits in Minuten für die letzten 30 Commits"
@@ -323,7 +440,7 @@ msgid "CommitMessage|Add %{file_name}"
msgstr "%{file_name} hinzufügen"
msgid "Commits"
-msgstr ""
+msgstr "Commits"
msgid "Commits feed"
msgstr "Liste der Commits"
@@ -337,9 +454,6 @@ msgstr "Committed von"
msgid "Compare"
msgstr "Vergleichen"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "Mitarbeitsanleitung"
@@ -442,7 +556,7 @@ msgid "Description"
msgstr "Beschreibung"
msgid "Details"
-msgstr ""
+msgstr "Details"
msgid "Directory name"
msgstr "Verzeichnisname"
@@ -489,6 +603,9 @@ msgstr "Pipeline Zeitplan bearbeiten %{id}"
msgid "Emails"
msgstr "E-Mails"
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr "Filtere alle"
@@ -516,6 +633,9 @@ msgstr "Monatlich (am Ersten um 4:00 Uhr)"
msgid "Every week (Sundays at 4:00am)"
msgstr "Wöchentlich (Sonntags um 4:00 Uhr)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Wechsel des Besitzers fehlgeschlagen"
@@ -572,8 +692,29 @@ msgstr "Gehe zu Deinem Ableger"
msgid "GoToYourFork|Fork"
msgstr "Ableger"
-msgid "Group overview"
-msgstr "Gruppen-Übersicht"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
+msgstr ""
msgid "Health Check"
msgstr "Systemzustand"
@@ -593,12 +734,6 @@ msgstr "Keine Probleme erkannt"
msgid "HealthCheck|Unhealthy"
msgstr "Problematisch"
-msgid "Home"
-msgstr "Startseite"
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "Aufräumen erfolgreich gestartet"
@@ -620,6 +755,9 @@ msgstr "Ticketereignisse"
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "Deaktiviert"
@@ -662,7 +800,7 @@ msgid "Leave project"
msgstr "Verlasse das Projekt"
msgid "License"
-msgstr "Lizenz"
+msgstr ""
msgid "Limited to showing %d event at most"
msgid_plural "Limited to showing %d events at most"
@@ -670,7 +808,7 @@ msgstr[0] "Limitiere die Anzeige auf höchstens %d Ereignis"
msgstr[1] "Limitiere die Anzeige auf höchstens %d Ereignisse"
msgid "Locked Files"
-msgstr "Gesperrte Dateien"
+msgstr ""
msgid "Median"
msgstr "Median"
@@ -684,14 +822,17 @@ msgstr ""
msgid "Merge events"
msgstr "Ereignisse zusammenführen"
-msgid "Messages"
+msgid "Merge request"
msgstr ""
+msgid "Messages"
+msgstr "Nachrichten"
+
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "einen SSH Schlüssel hinzufügst"
msgid "Monitoring"
-msgstr ""
+msgstr "Überwachung"
msgid "More information is available|here"
msgstr "hier"
@@ -812,6 +953,18 @@ msgstr "Übersicht"
msgid "Owner"
msgstr "Besitzer"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr "Passwort"
@@ -900,7 +1053,7 @@ msgid "Pipelines for last week"
msgstr ""
msgid "Pipelines for last year"
-msgstr ""
+msgstr "Pipelines des letzten Jahres"
msgid "Pipeline|all"
msgstr "Alle"
@@ -917,12 +1070,9 @@ msgstr "mit Stages"
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
+msgid "Profile"
msgstr ""
-msgid "Project"
-msgstr "Projekt"
-
msgid "Project '%{project_name}' queued for deletion."
msgstr "Das Projekt '%{project_name}' wurde zur Löschung eingeplant."
@@ -953,12 +1103,6 @@ msgstr "Der Link für den Export des Projektes ist abgelaufen. Bitte generiere e
msgid "Project export started. A download link will be sent by email."
msgstr "Export des Projektes gestartet. Ein Link zum herunterladen wir Dir per E-Mail zugesandt."
-msgid "Project home"
-msgstr "Startseite des Projektes"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr "Abonnieren"
@@ -983,27 +1127,30 @@ msgstr "Stage"
msgid "ProjectNetworkGraph|Graph"
msgstr "Diagramm"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
-msgstr ""
+msgstr "ProjectsDropdown | Projekte, die Sie häufig besuchen, werden hier angezeigt"
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr "Übertragungsereignisse"
@@ -1019,6 +1166,9 @@ msgstr "Branches"
msgid "RefSwitcher|Tags"
msgstr "Tags"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "Zugehörige Commits"
@@ -1065,7 +1215,7 @@ msgid "Revert this merge request"
msgstr "Merge Request zurücksetzen"
msgid "SSH Keys"
-msgstr ""
+msgstr "SSH-Schlüssel"
msgid "Save pipeline schedule"
msgstr "Zeitplan der Pipeline speichern"
@@ -1073,6 +1223,9 @@ msgstr "Zeitplan der Pipeline speichern"
msgid "Schedule a new pipeline"
msgstr "Plane eine neue Pipeline"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "Pipelines planen"
@@ -1110,6 +1263,12 @@ msgid "SetPasswordToCloneLink|set a password"
msgstr "ein Passwort festlegst"
msgid "Settings"
+msgstr "Einstellungen"
+
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
msgstr ""
msgid "Showing %d event"
@@ -1120,11 +1279,107 @@ msgstr[1] "Zeige %d Ereignisse"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "Quellcode"
msgid "Spam Logs"
-msgstr ""
+msgstr "Spam-Protokolle"
msgid "Specify the following URL during the Runner setup:"
msgstr "Lege die folgende URL während des Runner Setups fest:"
@@ -1132,6 +1387,9 @@ msgstr "Lege die folgende URL während des Runner Setups fest:"
msgid "StarProject|Star"
msgstr "Favorisieren"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "Beginne einen %{new_merge_request} mit diesen Änderungen"
@@ -1141,6 +1399,9 @@ msgstr "Starte den Runner!"
msgid "Switch branch/tag"
msgstr "Zu Branch/Tag wechseln"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] ""
@@ -1206,6 +1467,9 @@ msgstr "Der mittlere aller erfassten Werte. Zum Beispiel ist für 3, 5, 9 der Me
msgid "There are problems accessing Git storage: "
msgstr "Es gibt ein Problem beim Zugriff auf den Gitspeicher:"
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Dies bedeutet, dass Du keinen Code übertragen kannst, bevor Du kein leeres Repositorium erstellt oder ein Existierendes importiert hast."
@@ -1222,7 +1486,7 @@ msgid "Time until first merge request"
msgstr "Zeit bis zum ersten Merge Request"
msgid "Timeago|%s days ago"
-msgstr "seit %s Tagen"
+msgstr ""
msgid "Timeago|%s days remaining"
msgstr "%s Tage verbleibend"
@@ -1231,13 +1495,13 @@ msgid "Timeago|%s hours remaining"
msgstr "%s Stunden verbleibend"
msgid "Timeago|%s minutes ago"
-msgstr "seit %s Minuten "
+msgstr ""
msgid "Timeago|%s minutes remaining"
msgstr "%s Minuten verbleibend"
msgid "Timeago|%s months ago"
-msgstr "seit %s Monaten"
+msgstr ""
msgid "Timeago|%s months remaining"
msgstr "%s Monate verbleibend"
@@ -1246,13 +1510,13 @@ msgid "Timeago|%s seconds remaining"
msgstr "%s Sekunden verbleibend"
msgid "Timeago|%s weeks ago"
-msgstr "seit %s Wochen"
+msgstr ""
msgid "Timeago|%s weeks remaining"
msgstr "%s Wochen verbleibend"
msgid "Timeago|%s years ago"
-msgstr "seit %s Jahren"
+msgstr ""
msgid "Timeago|%s years remaining"
msgstr "%s Jahre verbleibend"
@@ -1381,9 +1645,15 @@ msgstr "Benutze den folgenden Registrierungstoken während des Setups:"
msgid "Use your global notification setting"
msgstr "Benutze Deine globalen Benachrichtigungseinstellungen"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "Zeige offene Merge Requests."
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Intern"
@@ -1456,6 +1726,12 @@ msgstr "Du kannst erst mittels SSH übertragen (push) oder abrufen (pull), nachd
msgid "Your name"
msgstr "Dein Name"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "Tag"
diff --git a/locale/eo/gitlab.po b/locale/eo/gitlab.po
index f9f61a109f6..e8c2195e4e3 100644
--- a/locale/eo/gitlab.po
+++ b/locale/eo/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:22-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:45-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Esperanto\n"
"Language: eo_UY\n"
@@ -29,6 +29,9 @@ msgstr[1] "%s enmetadoj estis transsaltitaj, por ne troŝarĝi la sistemon."
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_author_link} enmetis %{commit_timeago}"
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr ""
@@ -51,6 +54,9 @@ msgid_plural "%d pipelines"
msgstr[0] "1 ĉenstablo"
msgstr[1] "%d ĉenstabloj"
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Aro da diagramoj pri la seninterrompa integrado"
@@ -93,7 +99,7 @@ msgstr "Aldoni novan dosierujon"
msgid "All"
msgstr ""
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
@@ -117,10 +123,34 @@ msgstr ""
msgid "Are you sure?"
msgstr ""
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Alkroĉu dosieron per ŝovmetado aŭ %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -177,6 +207,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] "Branĉo"
@@ -194,6 +227,90 @@ msgstr "Iri al branĉo"
msgid "Branches"
msgstr "Branĉoj"
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "Foliumi dosierujon"
@@ -337,9 +454,6 @@ msgstr "Enmetita de"
msgid "Compare"
msgstr "Kompari"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "Gvidlinioj por kontribuado"
@@ -489,6 +603,9 @@ msgstr "Redakti ĉenstablan planon %{id}"
msgid "Emails"
msgstr ""
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr ""
@@ -516,6 +633,9 @@ msgstr "Ĉiumonate (en la 1a de la monato, je 4:00)"
msgid "Every week (Sundays at 4:00am)"
msgstr "Ĉiusemajne (en dimanĉo, je 4:00)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Ne eblas ŝanĝi la posedanton"
@@ -572,7 +692,28 @@ msgstr "Al via disbranĉigo"
msgid "GoToYourFork|Fork"
msgstr "Disbranĉigo"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
@@ -593,12 +734,6 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
-msgid "Home"
-msgstr "Hejmo"
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "La refreŝigo komenciĝis sukcese"
@@ -620,6 +755,9 @@ msgstr ""
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "Malŝaltita"
@@ -684,6 +822,9 @@ msgstr ""
msgid "Merge events"
msgstr ""
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr ""
@@ -812,6 +953,18 @@ msgstr ""
msgid "Owner"
msgstr "Posedanto"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -917,10 +1070,7 @@ msgstr "kun etapoj"
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -953,12 +1103,6 @@ msgstr "La ligilo por la projekta elporto eksvalidiĝis. Bonvolu krei novan elpo
msgid "Project export started. A download link will be sent by email."
msgstr "La elporto de la projekto komenciĝis. Vi ricevos ligilon per retpoŝto por elŝuti la datenoj."
-msgid "Project home"
-msgstr "Hejmo de la projekto"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr ""
@@ -983,27 +1127,30 @@ msgstr "Etapo"
msgid "ProjectNetworkGraph|Graph"
msgstr "Grafeo"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr ""
@@ -1019,6 +1166,9 @@ msgstr "Branĉoj"
msgid "RefSwitcher|Tags"
msgstr "Etikedoj"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "Rilataj enmetadoj"
@@ -1073,6 +1223,9 @@ msgstr "Konservi ĉenstablan planon"
msgid "Schedule a new pipeline"
msgstr "Plani novan ĉenstablon"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "Planado de la ĉenstabloj"
@@ -1112,6 +1265,12 @@ msgstr "kreos pasvorton"
msgid "Settings"
msgstr ""
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "Estas montrata %d evento"
@@ -1120,6 +1279,102 @@ msgstr[1] "Estas montrataj %d eventoj"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "Kodo"
@@ -1132,6 +1387,9 @@ msgstr ""
msgid "StarProject|Star"
msgstr "Steligi"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "Kreu %{new_merge_request} kun ĉi tiuj ŝanĝoj"
@@ -1141,6 +1399,9 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "Iri al branĉo/etikedo"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "Etikedo"
@@ -1206,6 +1467,9 @@ msgstr "La valoro, kiu troviĝas en la mezo de aro da rigardataj valoroj. Ekzemp
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Ĉi tiu signifas, ke vi ne povos alpuŝi kodon, antaŭ ol vi kreos malplenan deponejon aŭ enportos jam ekzistantan."
@@ -1381,9 +1645,15 @@ msgstr ""
msgid "Use your global notification setting"
msgstr "Uzi vian ĝeneralan agordon pri la sciigoj"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "Vidi la malfermitan peton pri kunfando"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Interna"
@@ -1456,6 +1726,12 @@ msgstr "Vi ne povos eltiri aŭ alpuŝi kodon per SSH antaŭ ol vi %{add_ssh_key_
msgid "Your name"
msgstr "Via nomo"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "tago"
diff --git a/locale/es/gitlab.po b/locale/es/gitlab.po
index ccf4b0abf9f..29a010f9428 100644
--- a/locale/es/gitlab.po
+++ b/locale/es/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:19-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:43-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
@@ -29,6 +29,9 @@ msgstr[1] "%s cambios adicionales han sido omitidos para evitar problemas de ren
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_author_link} cambió %{commit_timeago}"
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr ""
@@ -51,6 +54,9 @@ msgid_plural "%d pipelines"
msgstr[0] ""
msgstr[1] ""
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Una colección de gráficos sobre Integración Continua"
@@ -93,7 +99,7 @@ msgstr "Agregar nuevo directorio"
msgid "All"
msgstr ""
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
@@ -117,10 +123,34 @@ msgstr ""
msgid "Are you sure?"
msgstr ""
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Adjunte un archivo arrastrando & soltando o %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -177,6 +207,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] "Rama"
@@ -194,6 +227,90 @@ msgstr "Cambiar rama"
msgid "Branches"
msgstr "Ramas"
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "Examinar directorio"
@@ -337,9 +454,6 @@ msgstr "Enviado por"
msgid "Compare"
msgstr "Comparar"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "Guía de contribución"
@@ -489,6 +603,9 @@ msgstr "Editar Programación del Pipeline %{id}"
msgid "Emails"
msgstr ""
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr ""
@@ -516,6 +633,9 @@ msgstr "Todos los meses (el día 1 a las 4:00 am)"
msgid "Every week (Sundays at 4:00am)"
msgstr "Todas las semanas (domingos a las 4:00 am)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Error al cambiar el propietario"
@@ -572,7 +692,28 @@ msgstr "Ir a tu bifurcación"
msgid "GoToYourFork|Fork"
msgstr "Bifurcación"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
@@ -593,12 +734,6 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
-msgid "Home"
-msgstr "Inicio"
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "Servicio de limpieza iniciado con éxito"
@@ -620,6 +755,9 @@ msgstr ""
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "Deshabilitado"
@@ -684,6 +822,9 @@ msgstr ""
msgid "Merge events"
msgstr ""
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr ""
@@ -812,6 +953,18 @@ msgstr ""
msgid "Owner"
msgstr "Propietario"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -917,10 +1070,7 @@ msgstr "con etapas"
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -953,12 +1103,6 @@ msgstr "El enlace de exportación del proyecto ha caducado. Por favor, genera un
msgid "Project export started. A download link will be sent by email."
msgstr "Se inició la exportación del proyecto. Se enviará un enlace de descarga por correo electrónico."
-msgid "Project home"
-msgstr "Inicio del proyecto"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr ""
@@ -983,27 +1127,30 @@ msgstr "Etapa"
msgid "ProjectNetworkGraph|Graph"
msgstr "Historial gráfico"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr ""
@@ -1019,6 +1166,9 @@ msgstr "Ramas"
msgid "RefSwitcher|Tags"
msgstr "Etiquetas"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "Cambios Relacionados"
@@ -1073,6 +1223,9 @@ msgstr "Guardar programación del pipeline"
msgid "Schedule a new pipeline"
msgstr "Programar un nuevo pipeline"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "Programación de Pipelines"
@@ -1112,6 +1265,12 @@ msgstr "establecer una contraseña"
msgid "Settings"
msgstr ""
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "Mostrando %d evento"
@@ -1120,6 +1279,102 @@ msgstr[1] "Mostrando %d eventos"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "Código fuente"
@@ -1132,6 +1387,9 @@ msgstr ""
msgid "StarProject|Star"
msgstr "Destacar"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "Iniciar una %{new_merge_request} con estos cambios"
@@ -1141,6 +1399,9 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "Cambiar rama/etiqueta"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "Etiqueta"
@@ -1206,6 +1467,9 @@ msgstr "El valor en el punto medio de una serie de valores observados. Por ejemp
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Esto significa que no puede enviar código hasta que cree un repositorio vacío o importe uno existente."
@@ -1381,9 +1645,15 @@ msgstr ""
msgid "Use your global notification setting"
msgstr "Utiliza tu configuración de notificación global"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "Ver solicitud de fusión abierta"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Interno"
@@ -1456,6 +1726,12 @@ msgstr "No podrás actualizar o enviar código al proyecto a través de SSH hast
msgid "Your name"
msgstr "Tu nombre"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "día"
diff --git a/locale/fr/gitlab.po b/locale/fr/gitlab.po
index c98156e026e..28d9c6a3e56 100644
--- a/locale/fr/gitlab.po
+++ b/locale/fr/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:22-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:45-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: French\n"
"Language: fr_FR\n"
@@ -29,27 +29,33 @@ msgstr[1] "%s validations supplémentaires ont été masquées afin d'éviter de
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_author_link} a validé %{commit_timeago}"
-msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
msgstr ""
+msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
+msgstr "%{number_of_failures} sur %{maximum_failures} tentative(s). GitLab va vous permettre d'accéder à la prochaine tentative."
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds."
-msgstr ""
+msgstr "%{number_of_failures} échecs sur %{maximum_failures}. GitLab va bloquer l’accès pendant %{number_of_seconds} secondes."
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved."
-msgstr ""
+msgstr "%{number_of_failures} échecs sur %{maximum_failures}. GitLab ne va plus réessayer automatiquement. Réinitialisez les informations de stockage lorsque le problème est résolu."
msgid "%{storage_name}: failed storage access attempt on host:"
msgid_plural "%{storage_name}: %{failed_attempts} failed storage access attempts:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%{storage_name} : la tentative d’accès au stockage a échouée sur l’hôte :"
+msgstr[1] "%{storage_name} : %{failed_attempts} tentatives d’accès au stockage ont échouées :"
msgid "(checkout the %{link} for information on how to install it)."
-msgstr ""
+msgstr "(Lisez %{link} pour savoir comment l'installer)."
msgid "1 pipeline"
msgid_plural "%d pipelines"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 pipeline"
+msgstr[1] "%d pipelines"
+
+msgid "1st contribution!"
+msgstr ""
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Un ensemble de graphiques concernant l’Intégration Continue (CI)"
@@ -58,16 +64,16 @@ msgid "About auto deploy"
msgstr "A propos de l'auto-déploiement"
msgid "Abuse Reports"
-msgstr ""
+msgstr "Rapports d’abus"
msgid "Access Tokens"
-msgstr ""
+msgstr "Jetons d'Accès"
msgid "Access to failing storages has been temporarily disabled to allow the mount to recover. Reset storage information after the issue has been resolved to allow access again."
-msgstr ""
+msgstr "L'accès aux stockages défaillants a été temporairement désactivé pour permettre au montage de récupérer. Réinitialiser les informations de stockage dès que le problème est résolu pour permettre l’accès à nouveau."
msgid "Account"
-msgstr ""
+msgstr "Compte"
msgid "Active"
msgstr "Actif"
@@ -91,13 +97,13 @@ msgid "Add new directory"
msgstr "Ajouter un nouveau dossier"
msgid "All"
-msgstr ""
+msgstr "Tous"
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
-msgstr ""
+msgstr "Applications"
msgid "Archived project! Repository is read-only"
msgstr "Projet archivé ! Le dépôt est en lecture seule"
@@ -106,21 +112,45 @@ msgid "Are you sure you want to delete this pipeline schedule?"
msgstr "Êtes-vous sûr de vouloir supprimer ce pipeline programmé"
msgid "Are you sure you want to discard your changes?"
-msgstr ""
+msgstr "Êtes-vous sûr de vouloir annuler vos modifications ?"
msgid "Are you sure you want to reset registration token?"
-msgstr ""
+msgstr "Êtes-vous sûr de vouloir réinitialiser le jeton d’inscription ?"
msgid "Are you sure you want to reset the health check token?"
-msgstr ""
+msgstr "Êtes-vous sûr de vouloir réinitialiser le jeton de bilan de santé ?"
msgid "Are you sure?"
+msgstr "Êtes-vous certain ?"
+
+msgid "Artifacts"
msgstr ""
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Attachez un fichier par glisser & déposer ou %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -177,10 +207,13 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Branche"
+msgstr[1] "Branches"
msgid "Branch %{branch_name} was created. To set up auto deploy, choose a GitLab CI Yaml template and commit your changes. %{link_to_autodeploy_doc}"
msgstr "La branche %{branch_name} a été crée. Pour mettre en place le déploiement automatisé, sélectionnez un modèle de fichier Yaml pour l'intégration continue (CI) de GitLab, et validez les modifications. %{link_to_autodeploy_doc}"
@@ -192,6 +225,90 @@ msgid "BranchSwitcherTitle|Switch branch"
msgstr "Changer de branche"
msgid "Branches"
+msgstr "Branches"
+
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
msgstr ""
msgid "Browse Directory"
@@ -210,7 +327,7 @@ msgid "ByAuthor|by"
msgstr "par"
msgid "CI / CD"
-msgstr ""
+msgstr "Intégration continu / Déploiement continu"
msgid "CI configuration"
msgstr "Configuration de l'intégration continue (CI)"
@@ -219,19 +336,19 @@ msgid "Cancel"
msgstr "Annuler"
msgid "Cancel edit"
-msgstr ""
+msgstr "Annuler modification"
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "Sélectionner dans la branche"
msgid "ChangeTypeActionLabel|Revert in branch"
-msgstr "Annuler dans la branche"
+msgstr "Défaire dans la branche"
msgid "ChangeTypeAction|Cherry-pick"
msgstr "Sélectionner"
msgid "ChangeTypeAction|Revert"
-msgstr "Annuler"
+msgstr "Défaire"
msgid "Changelog"
msgstr "Journal des modifications"
@@ -240,7 +357,7 @@ msgid "Charts"
msgstr "Graphiques"
msgid "Chat"
-msgstr ""
+msgstr "Chat"
msgid "Cherry-pick this commit"
msgstr "Sélectionner cette validation"
@@ -261,10 +378,10 @@ msgid "CiStatusLabel|manual action"
msgstr "action manuelle"
msgid "CiStatusLabel|passed"
-msgstr "passé"
+msgstr "réussi"
msgid "CiStatusLabel|passed with warnings"
-msgstr "passé avec des avertissements"
+msgstr "réussi avec des avertissements"
msgid "CiStatusLabel|pending"
msgstr "en attente"
@@ -279,7 +396,7 @@ msgid "CiStatusText|blocked"
msgstr "bloqué"
msgid "CiStatusText|canceled"
-msgstr "annulé "
+msgstr "annulé"
msgid "CiStatusText|created"
msgstr "créé"
@@ -291,7 +408,7 @@ msgid "CiStatusText|manual"
msgstr "manuel"
msgid "CiStatusText|passed"
-msgstr "passé"
+msgstr "réussi"
msgid "CiStatusText|pending"
msgstr "en attente"
@@ -303,7 +420,7 @@ msgid "CiStatus|running"
msgstr "en cours"
msgid "Comments"
-msgstr ""
+msgstr "Commentaires"
msgid "Commit"
msgid_plural "Commits"
@@ -337,9 +454,6 @@ msgstr "Validé par"
msgid "Compare"
msgstr "Comparer"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "Guilde de contribution"
@@ -359,7 +473,7 @@ msgid "Create New Directory"
msgstr "Créer un nouveau dossier"
msgid "Create a new branch"
-msgstr ""
+msgstr "Créer une nouvelle branche"
msgid "Create a personal access token on your account to pull or push via %{protocol}."
msgstr "Créer un jeton d’accès personnel pour votre compte afin de récupérer ou pousser par %{protocol}."
@@ -436,19 +550,19 @@ msgstr[0] "Déploiement"
msgstr[1] "Déploiements"
msgid "Deploy Keys"
-msgstr ""
+msgstr "Clés de déploiement"
msgid "Description"
-msgstr ""
+msgstr "Description"
msgid "Details"
-msgstr ""
+msgstr "Détails"
msgid "Directory name"
msgstr "Nom du dossier"
msgid "Discard changes"
-msgstr ""
+msgstr "Supprimer les modifications"
msgid "Don't show again"
msgstr "Ne plus montrer"
@@ -487,25 +601,28 @@ msgid "Edit Pipeline Schedule %{id}"
msgstr "Éditer le pipeline programmé %{id}"
msgid "Emails"
+msgstr "Courriels"
+
+msgid "Enable in settings"
msgstr ""
msgid "EventFilterBy|Filter by all"
-msgstr ""
+msgstr "Aucun filtre"
msgid "EventFilterBy|Filter by comments"
-msgstr ""
+msgstr "Filtrer par commentaires"
msgid "EventFilterBy|Filter by issue events"
-msgstr ""
+msgstr "Filtrer par événements d'incident"
msgid "EventFilterBy|Filter by merge events"
-msgstr ""
+msgstr "Filtrer par événements de fusion"
msgid "EventFilterBy|Filter by push events"
-msgstr ""
+msgstr "Filtrer par événements de poussée"
msgid "EventFilterBy|Filter by team"
-msgstr ""
+msgstr "Filtrer par équipe"
msgid "Every day (at 4:00am)"
msgstr "Chaque jour (à 4:00 du matin)"
@@ -516,6 +633,9 @@ msgstr "Chaque mois (le 1er à 4:00 du matin)"
msgid "Every week (Sundays at 4:00am)"
msgstr "Chaque semaine (dimanche à 4:00 du matin)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Échec du changement de propriétaire"
@@ -555,16 +675,16 @@ msgid "From merge request merge until deploy to production"
msgstr "Depuis la fusion de la demande de fusion jusqu'au déploiement en production"
msgid "GPG Keys"
-msgstr ""
+msgstr "Clés GPG"
msgid "Geo Nodes"
msgstr ""
msgid "Git storage health information has been reset"
-msgstr ""
+msgstr "Les informations de santé du stockage Git ont été réinitialisées"
msgid "GitLab Runner section"
-msgstr ""
+msgstr "Section de Runner GitLab"
msgid "Go to your fork"
msgstr "Aller à votre fourche"
@@ -572,32 +692,47 @@ msgstr "Aller à votre fourche"
msgid "GoToYourFork|Fork"
msgstr "Fourche"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
-msgstr ""
+msgstr "Bilan de santé"
msgid "Health information can be retrieved from the following endpoints. More information is available"
-msgstr ""
+msgstr "Des informations de santé peuvent être récupérées depuis les adresses suivantes. Plus d’informations"
msgid "HealthCheck|Access token is"
-msgstr ""
+msgstr "Le jeton d’accès est"
msgid "HealthCheck|Healthy"
-msgstr ""
+msgstr "En bonne santé"
msgid "HealthCheck|No Health Problems Detected"
-msgstr ""
+msgstr "Aucun problème détecté"
msgid "HealthCheck|Unhealthy"
-msgstr ""
-
-msgid "Home"
-msgstr "Accueil"
-
-msgid "Hooks"
-msgstr ""
+msgstr "En mauvaise santé"
msgid "Housekeeping successfully started"
msgstr "Maintenance démarrée avec succès"
@@ -606,7 +741,7 @@ msgid "Import repository"
msgstr "Importer un dépôt"
msgid "Install a Runner compatible with GitLab CI"
-msgstr ""
+msgstr "Installez un Runner compatible avec l'intégration continue de GitLab"
msgid "Interval Pattern"
msgstr "Schéma d’intervalle"
@@ -615,9 +750,12 @@ msgid "Introducing Cycle Analytics"
msgstr "Introduction à l'analyseur de cycle"
msgid "Issue events"
-msgstr ""
+msgstr "Événements de l'incident"
msgid "Issues"
+msgstr "Incidents"
+
+msgid "Jobs"
msgstr ""
msgid "LFSStatus|Disabled"
@@ -644,10 +782,10 @@ msgid "Last commit"
msgstr "Dernière validation"
msgid "LastPushEvent|You pushed to"
-msgstr ""
+msgstr "Vous avez poussé sur"
msgid "LastPushEvent|at"
-msgstr ""
+msgstr "à"
msgid "Learn more in the"
msgstr "En apprendre plus dans le"
@@ -676,25 +814,28 @@ msgid "Median"
msgstr "Médian"
msgid "Members"
-msgstr ""
+msgstr "Membres"
msgid "Merge Requests"
-msgstr ""
+msgstr "Demandes de fusion"
msgid "Merge events"
+msgstr "Événements de fusion"
+
+msgid "Merge request"
msgstr ""
msgid "Messages"
-msgstr ""
+msgstr "Messages"
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "ajouter une clef SSH"
msgid "Monitoring"
-msgstr ""
+msgstr "Surveillance"
msgid "More information is available|here"
-msgstr ""
+msgstr "ici"
msgid "New Issue"
msgid_plural "New Issues"
@@ -795,7 +936,7 @@ msgid "NotificationLevel|Watch"
msgstr "Surveillé"
msgid "Notifications"
-msgstr ""
+msgstr "Notifications"
msgid "OfSearchInADropdown|Filter"
msgstr "Filtre"
@@ -804,20 +945,32 @@ msgid "OpenedNDaysAgo|Opened"
msgstr "Ouvert"
msgid "Options"
-msgstr ""
+msgstr "Paramètres"
msgid "Overview"
-msgstr ""
+msgstr "Vue d'ensemble"
msgid "Owner"
msgstr "Propriétaire"
-msgid "Password"
+msgid "Pagination|Last »"
msgstr ""
-msgid "Pipeline"
+msgid "Pagination|Next"
msgstr ""
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
+msgid "Password"
+msgstr "Mot de Passe"
+
+msgid "Pipeline"
+msgstr "Pipeline"
+
msgid "Pipeline Health"
msgstr "Santé du Pipeline"
@@ -888,19 +1041,19 @@ msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "Personnalisé"
msgid "Pipelines"
-msgstr ""
+msgstr "Pipelines"
msgid "Pipelines charts"
msgstr "Graphique des pipelines"
msgid "Pipelines for last month"
-msgstr ""
+msgstr "Pipelines pour le dernier mois"
msgid "Pipelines for last week"
-msgstr ""
+msgstr "Pipelines pour la dernière semaine"
msgid "Pipelines for last year"
-msgstr ""
+msgstr "Pipelines pour la dernière année"
msgid "Pipeline|all"
msgstr "Tous"
@@ -915,12 +1068,9 @@ msgid "Pipeline|with stages"
msgstr "avec les étapes"
msgid "Preferences"
-msgstr ""
+msgstr "Préférences"
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -939,7 +1089,7 @@ msgid "Project access must be granted explicitly to each user."
msgstr "L’accès au projet doit être explicitement accordé à chaque utilisateur."
msgid "Project details"
-msgstr ""
+msgstr "Détails du projet"
msgid "Project export could not be deleted."
msgstr "L'export du projet n'a pas pu être supprimé."
@@ -953,14 +1103,8 @@ msgstr "Le lien de l’export du projet a expiré. Merci de générer un nouvel
msgid "Project export started. A download link will be sent by email."
msgstr "L'export du projet a débuté. Un lien de téléchargement sera envoyé par courriel."
-msgid "Project home"
-msgstr "Accueil du projet"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
-msgstr ""
+msgstr "S’abonner"
msgid "ProjectFeature|Disabled"
msgstr "Désactivé"
@@ -983,29 +1127,32 @@ msgstr "Étape"
msgid "ProjectNetworkGraph|Graph"
msgstr "Graphique "
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
+msgstr "Chargement des projets"
+
+msgid "ProjectsDropdown|Projects you visit often will appear here"
+msgstr "Les projets que vous visitez souvent apparaîtront ici"
+
+msgid "ProjectsDropdown|Search your projects"
+msgstr "Chercher dans vos projets"
+
+msgid "ProjectsDropdown|Something went wrong on our end."
msgstr ""
msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
-msgid "ProjectsDropdown|Projects you visit often will appear here"
-msgstr ""
-
-msgid "ProjectsDropdown|Search your projects"
-msgstr ""
-
-msgid "ProjectsDropdown|Something went wrong on our end"
-msgstr ""
+msgstr "Désolé, aucun projet ne correspond à votre recherche"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
+msgstr "Cette fonctionnalité requiert le support du localStorage par votre navigateur"
+
+msgid "Push Rules"
msgstr ""
msgid "Push events"
-msgstr ""
+msgstr "Évènements de poussée"
msgid "Read more"
msgstr "Lire plus"
@@ -1019,6 +1166,9 @@ msgstr "Branches"
msgid "RefSwitcher|Tags"
msgstr "Étiquettes"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "Validations liés"
@@ -1044,19 +1194,19 @@ msgid "Remove project"
msgstr "Supprimer le projet"
msgid "Repository"
-msgstr ""
+msgstr "Dépôt"
msgid "Request Access"
msgstr "Demander l'accès"
msgid "Reset git storage health information"
-msgstr ""
+msgstr "Réinitialiser les informations de santé du stockage Git"
msgid "Reset health check access token"
-msgstr ""
+msgstr "Réinitialiser le jeton d’accès au bilan de santé"
msgid "Reset runners registration token"
-msgstr ""
+msgstr "Réinitialiser le jeton d’inscription des Runners"
msgid "Revert this commit"
msgstr "Annuler cette validation"
@@ -1065,7 +1215,7 @@ msgid "Revert this merge request"
msgstr "Annuler cette demande de fusion"
msgid "SSH Keys"
-msgstr ""
+msgstr "Clés SSH"
msgid "Save pipeline schedule"
msgstr "Sauvegarder le pipeline programmé"
@@ -1073,6 +1223,9 @@ msgstr "Sauvegarder le pipeline programmé"
msgid "Schedule a new pipeline"
msgstr "Programmer un nouveau pipeline"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "Programmer des pipelines"
@@ -1086,13 +1239,13 @@ msgid "Select a timezone"
msgstr "Sélectionnez un fuseau horaire"
msgid "Select existing branch"
-msgstr ""
+msgstr "Sélectionnez une branche existante"
msgid "Select target branch"
msgstr "Sélectionnez une branche cible"
msgid "Service Templates"
-msgstr ""
+msgstr "Modèles de service"
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "Définissez un mot de passe pour votre compte pour pouvoir tirer ou pousser par %{protocol}."
@@ -1110,6 +1263,12 @@ msgid "SetPasswordToCloneLink|set a password"
msgstr "définir un mot de passe"
msgid "Settings"
+msgstr "Paramètres"
+
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
msgstr ""
msgid "Showing %d event"
@@ -1118,29 +1277,131 @@ msgstr[0] "Affichage de %d évènement"
msgstr[1] "Affichage de %d évènements"
msgid "Snippets"
+msgstr "Extraits de code"
+
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
msgstr ""
msgid "Source code"
msgstr "Code source"
msgid "Spam Logs"
-msgstr ""
+msgstr "Journaux des messages indésirables"
msgid "Specify the following URL during the Runner setup:"
-msgstr ""
+msgstr "Spécifiez l’URL suivante lors de la configuration du Runner :"
msgid "StarProject|Star"
msgstr "S'abonner"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "Créer une %{new_merge_request} avec ces changements"
msgid "Start the Runner!"
-msgstr ""
+msgstr "Démarrer le Runner !"
msgid "Switch branch/tag"
msgstr "Changer de branche / d'étiquette"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "Étiquette"
@@ -1153,7 +1414,7 @@ msgid "Target Branch"
msgstr "Branche cible"
msgid "Team"
-msgstr ""
+msgstr "Équipe"
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "L’étape de développement montre le temps entre la première validation et la création de la demande de fusion. Les données seront automatiquement ajoutées ici une fois que vous aurez créé votre première demande de fusion."
@@ -1204,6 +1465,9 @@ msgid "The value lying at the midpoint of a series of observed values. E.g., bet
msgstr "La valeur située au point médian d’une série de valeur observée. C.à.d., entre 3, 5, 9, le médian est 5. Entre 3, 5, 7, 8, le médian est (5+7)/2 = 6."
msgid "There are problems accessing Git storage: "
+msgstr "Il y a des difficultés à accéder aux données Git : "
+
+msgid "This is the author's first Merge Request to this project. Handle with care."
msgstr ""
msgid "This means you can not push code until you create an empty repository or import existing one."
@@ -1376,14 +1640,20 @@ msgid "UploadLink|click to upload"
msgstr "Cliquez pour envoyer"
msgid "Use the following registration token during setup:"
-msgstr ""
+msgstr "Utiliser le jeton d’inscription suivant pendant l’installation :"
msgid "Use your global notification setting"
msgstr "Utiliser vos paramètres de notification globaux"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "Afficher la demande de fusion"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Interne"
@@ -1403,7 +1673,7 @@ msgid "We don't have enough data to show this stage."
msgstr "Nous n'avons pas suffisamment de données pour afficher cette étape."
msgid "Wiki"
-msgstr ""
+msgstr "Wiki"
msgid "Withdraw Access Request"
msgstr "Retirer la demande d'accès"
@@ -1456,6 +1726,12 @@ msgstr "Vous ne pourrez pas récupérer ou pousser de code par SSH tant que vous
msgid "Your name"
msgstr "Votre nom"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "jour"
@@ -1469,6 +1745,6 @@ msgstr "courriels de notification"
msgid "parent"
msgid_plural "parents"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "parent"
+msgstr[1] "parents"
diff --git a/locale/it/gitlab.po b/locale/it/gitlab.po
index 0249c4fe9eb..804817e96e9 100644
--- a/locale/it/gitlab.po
+++ b/locale/it/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:20-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:44-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Italian\n"
"Language: it_IT\n"
@@ -29,6 +29,9 @@ msgstr[1] "%s commit aggiuntivi sono stati omessi per evitare degradi di prestaz
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_author_link} ha committato %{commit_timeago}"
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr ""
@@ -51,6 +54,9 @@ msgid_plural "%d pipelines"
msgstr[0] ""
msgstr[1] ""
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Un insieme di grafici riguardo la Continuous Integration"
@@ -93,7 +99,7 @@ msgstr "Aggiungi una directory (cartella)"
msgid "All"
msgstr ""
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
@@ -117,10 +123,34 @@ msgstr ""
msgid "Are you sure?"
msgstr ""
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Aggiungi un file tramite trascina & rilascia ( drag & drop) o %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -177,6 +207,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] ""
@@ -194,6 +227,90 @@ msgstr "Cambia branch"
msgid "Branches"
msgstr ""
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "Naviga direttori"
@@ -337,9 +454,6 @@ msgstr "Committato da "
msgid "Compare"
msgstr "Confronta"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "Guida per contribuire"
@@ -489,6 +603,9 @@ msgstr "Cambia programmazione della pipeline %{id}"
msgid "Emails"
msgstr ""
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr ""
@@ -516,6 +633,9 @@ msgstr "Ogni primo giorno del mese (alle 4 del mattino)"
msgid "Every week (Sundays at 4:00am)"
msgstr "Ogni settimana (Di domenica alle 4 del mattino)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Impossibile cambiare owner"
@@ -572,7 +692,28 @@ msgstr "Vai il tuo fork"
msgid "GoToYourFork|Fork"
msgstr "Fork"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
@@ -593,12 +734,6 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
-msgid "Home"
-msgstr ""
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "Housekeeping iniziato con successo"
@@ -620,6 +755,9 @@ msgstr ""
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "Disabilitato"
@@ -684,6 +822,9 @@ msgstr ""
msgid "Merge events"
msgstr ""
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr ""
@@ -812,6 +953,18 @@ msgstr ""
msgid "Owner"
msgstr ""
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -917,10 +1070,7 @@ msgstr "con più stadi"
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -953,12 +1103,6 @@ msgstr "Il link d'esportazione del progetto è scaduto. Genera una nuova esporta
msgid "Project export started. A download link will be sent by email."
msgstr "Esportazione del progetto iniziata. Un link di download sarà inviato via email."
-msgid "Project home"
-msgstr "Home di progetto"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr ""
@@ -983,27 +1127,30 @@ msgstr "Stadio"
msgid "ProjectNetworkGraph|Graph"
msgstr "Grafico"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr ""
@@ -1019,6 +1166,9 @@ msgstr "Branches"
msgid "RefSwitcher|Tags"
msgstr "Tags"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "Commit correlati"
@@ -1073,6 +1223,9 @@ msgstr "Salva pianificazione pipeline"
msgid "Schedule a new pipeline"
msgstr "Pianifica una nuova Pipeline"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "Pianificazione pipelines"
@@ -1112,6 +1265,12 @@ msgstr "imposta una password"
msgid "Settings"
msgstr ""
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "Visualizza %d evento"
@@ -1120,6 +1279,102 @@ msgstr[1] "Visualizza %d eventi"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "Codice Sorgente"
@@ -1132,6 +1387,9 @@ msgstr ""
msgid "StarProject|Star"
msgstr "Star"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "inizia una %{new_merge_request} con queste modifiche"
@@ -1141,6 +1399,9 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "Cambia branch/tag"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] ""
@@ -1206,6 +1467,9 @@ msgstr "Il valore falsato nel mezzo di una serie di dati osservati. ES: tra 3,5,
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Questo significa che non è possibile effettuare push di codice fino a che non crei una repository vuota o ne importi una esistente"
@@ -1381,9 +1645,15 @@ msgstr ""
msgid "Use your global notification setting"
msgstr "Usa le tue impostazioni globali "
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "Mostra la richieste di merge aperte"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Interno"
@@ -1456,6 +1726,12 @@ msgstr "Non sarai in grado di effettuare push o pull tramite SSH fino a che %{ad
msgid "Your name"
msgstr "Il tuo nome"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "giorno"
diff --git a/locale/ja/gitlab.po b/locale/ja/gitlab.po
index c66dd3c1b6b..2a08abda7ce 100644
--- a/locale/ja/gitlab.po
+++ b/locale/ja/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:20-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:44-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
@@ -27,6 +27,9 @@ msgstr[0] "パフォーマンス低下を避けるため %s 個のコミット
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_timeago}に%{commit_author_link}がコミットしました。"
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr ""
@@ -47,6 +50,9 @@ msgid "1 pipeline"
msgid_plural "%d pipelines"
msgstr[0] "%d 個のパイプライン"
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "CIについてのグラフ"
@@ -89,7 +95,7 @@ msgstr "新規ディレクトリを追加"
msgid "All"
msgstr ""
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
@@ -113,10 +119,34 @@ msgstr ""
msgid "Are you sure?"
msgstr ""
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "ドラッグ&ドロップまたは %{upload_link} でファイルを添付"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -173,6 +203,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] "ブランチ"
@@ -189,6 +222,90 @@ msgstr "ブランチを切替"
msgid "Branches"
msgstr "ブランチ"
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "ディレクトリを表示"
@@ -331,9 +448,6 @@ msgstr "コミット担当者: "
msgid "Compare"
msgstr "比較"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "貢献者向けガイド"
@@ -482,6 +596,9 @@ msgstr "パイプラインスケジュール %{id} を編集"
msgid "Emails"
msgstr ""
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr ""
@@ -509,6 +626,9 @@ msgstr "毎月 (1日の午前4:00)"
msgid "Every week (Sundays at 4:00am)"
msgstr "毎週 (日曜日の午前4:00)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "オーナーを変更できませんでした"
@@ -564,7 +684,28 @@ msgstr "自分のフォークへ移動"
msgid "GoToYourFork|Fork"
msgstr "フォーク"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
@@ -585,12 +726,6 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
-msgid "Home"
-msgstr "ホーム"
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "ハウスキーピングは正常に起動しました。"
@@ -612,6 +747,9 @@ msgstr ""
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "無効"
@@ -674,6 +812,9 @@ msgstr ""
msgid "Merge events"
msgstr ""
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr ""
@@ -801,6 +942,18 @@ msgstr ""
msgid "Owner"
msgstr "オーナー"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -906,10 +1059,7 @@ msgstr "ステージあり"
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -942,12 +1092,6 @@ msgstr "プロジェクトのエクスポートリンクは期限切れになり
msgid "Project export started. A download link will be sent by email."
msgstr "プロジェクトのエクスポートを開始しました。ダウンロードのリンクはメールで送信します"
-msgid "Project home"
-msgstr "プロジェクトホーム"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr ""
@@ -972,27 +1116,30 @@ msgstr "ステージ"
msgid "ProjectNetworkGraph|Graph"
msgstr "ネットワークグラフ"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr ""
@@ -1008,6 +1155,9 @@ msgstr "ブランチ"
msgid "RefSwitcher|Tags"
msgstr "タグ"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "関連するコミット"
@@ -1062,6 +1212,9 @@ msgstr "パイプラインスケジュールを保存"
msgid "Schedule a new pipeline"
msgstr "新しいパイプラインのスケジュールを作成"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "パイプラインスケジューリング"
@@ -1101,6 +1254,12 @@ msgstr "パスワードを設定"
msgid "Settings"
msgstr ""
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "%d のイベントを表示中"
@@ -1108,6 +1267,102 @@ msgstr[0] "%d のイベントを表示中"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "ソースコード"
@@ -1120,6 +1375,9 @@ msgstr ""
msgid "StarProject|Star"
msgstr "スターを付ける"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "この変更で %{new_merge_request} を作成する"
@@ -1129,6 +1387,9 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "ブランチ・タグ切り替え"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "タグ"
@@ -1193,6 +1454,9 @@ msgstr "得られた一連のデータを小さい順に並べたときに中央
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "空レポジトリーを作成または既存レポジトリーをインポートをしなければ、コードのプッシュはできません。"
@@ -1366,9 +1630,15 @@ msgstr ""
msgid "Use your global notification setting"
msgstr "全体通知設定を利用"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "オープンなマージリクエストを表示"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "内部"
@@ -1441,6 +1711,12 @@ msgstr "%{add_ssh_key_link} をプロファイルに追加していないので
msgid "Your name"
msgstr "名前"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "日"
diff --git a/locale/ko/gitlab.po b/locale/ko/gitlab.po
index bbf4aa15cd7..de4a13d3765 100644
--- a/locale/ko/gitlab.po
+++ b/locale/ko/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:19-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:43-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Korean\n"
"Language: ko_KR\n"
@@ -27,6 +27,9 @@ msgstr[0] "%s 추가 커밋은 성능 이슈를 방지하기 위해 생략되었
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_timeago} 에 %{commit_author_link} 님이 커밋하였습니다. "
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr "%{number_of_failures} / %{maximum_failures} 실패. GitLab 은 다음 시도에서 성공하면 접근을 허용할 것입니다."
@@ -47,6 +50,9 @@ msgid "1 pipeline"
msgid_plural "%d pipelines"
msgstr[0] "%d 파이프라인"
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "지속적인 통합에 관한 그래프 모음"
@@ -89,7 +95,7 @@ msgstr "새 디렉토리 추가"
msgid "All"
msgstr "전체"
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
@@ -113,10 +119,34 @@ msgstr "헬스 체크 토큰을 초기화 하시겠습니까?"
msgid "Are you sure?"
msgstr "확실합니까?"
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "드래그 & 드롭 또는 %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -173,6 +203,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] "브랜치"
@@ -189,6 +222,90 @@ msgstr "브랜치 변경"
msgid "Branches"
msgstr "브랜치"
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "디렉토리 찾아보기"
@@ -331,9 +448,6 @@ msgstr "커밋한 사용자"
msgid "Compare"
msgstr "비교"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "기여에 대한 안내"
@@ -482,6 +596,9 @@ msgstr "파이프라인 스케줄 편집 %{id}"
msgid "Emails"
msgstr ""
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr "모든 값을 기준으로 필터"
@@ -509,6 +626,9 @@ msgstr "매월 (1일 오전 4시)"
msgid "Every week (Sundays at 4:00am)"
msgstr "매주 (일요일 오전 4시에)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "소유자를 변경하지 못했습니다"
@@ -564,7 +684,28 @@ msgstr "당신의 포크로 이동하세요"
msgid "GoToYourFork|Fork"
msgstr "포크"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
@@ -585,12 +726,6 @@ msgstr " 헬스 문제가 발견되지 않았습니다."
msgid "HealthCheck|Unhealthy"
msgstr "비정상"
-msgid "Home"
-msgstr "홈"
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "Housekeeping이 성공적으로 시작되었습니다"
@@ -612,6 +747,9 @@ msgstr "이슈 이벤트"
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "Disabled"
@@ -674,6 +812,9 @@ msgstr ""
msgid "Merge events"
msgstr "머지 이벤트"
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr ""
@@ -801,6 +942,18 @@ msgstr ""
msgid "Owner"
msgstr "소유자"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -906,10 +1059,7 @@ msgstr "스테이징"
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -942,12 +1092,6 @@ msgstr "프로젝트 내보내기 링크가 만료되었습니다. 프로젝트
msgid "Project export started. A download link will be sent by email."
msgstr "프로젝트 내보내기가 시작되었습니다. 다운로드 링크는 이메일로 전송됩니다."
-msgid "Project home"
-msgstr "프로젝트 홈"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr "구독"
@@ -972,27 +1116,30 @@ msgstr "스테이징"
msgid "ProjectNetworkGraph|Graph"
msgstr "그래프"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr "푸쉬 이벤트"
@@ -1008,6 +1155,9 @@ msgstr "브랜치"
msgid "RefSwitcher|Tags"
msgstr "태그"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "관련 커밋"
@@ -1062,6 +1212,9 @@ msgstr "파이프라인 스케줄 저장"
msgid "Schedule a new pipeline"
msgstr "새로운 파이프라인 스케줄 잡기"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "파이프라인 스케줄링"
@@ -1101,6 +1254,12 @@ msgstr "패스워드 설정"
msgid "Settings"
msgstr ""
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "%d 개의 이벤트 표시 중"
@@ -1108,6 +1267,102 @@ msgstr[0] "%d 개의 이벤트 표시 중"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "소스 코드"
@@ -1120,6 +1375,9 @@ msgstr "Runner 설정 중 다음 URL을 지정하세요."
msgid "StarProject|Star"
msgstr "별표"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "이 변경 사항으로 %{new_merge_request} 을 시작하십시오."
@@ -1129,6 +1387,9 @@ msgstr "Runner 시작!"
msgid "Switch branch/tag"
msgstr "스위치 브랜치/태그"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "태그"
@@ -1193,6 +1454,9 @@ msgstr "값은 일련의 관측 값 중점에 있습니다. 예를 들어, 3, 5,
msgid "There are problems accessing Git storage: "
msgstr "git storage에 접근하는데 문제가 발생했습니다. "
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "즉, 빈 저장소를 만들거나 기존 저장소를 가져올 때까지 코드를 Push 할 수 없습니다."
@@ -1366,9 +1630,15 @@ msgstr "설정 중에 다음 등록 토큰 이용 : "
msgid "Use your global notification setting"
msgstr "전체 알림 설정 사용"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "열린 머지 리퀘스트보기"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "내부"
@@ -1441,6 +1711,12 @@ msgstr "당신의 프로필에 %{add_ssh_key_link} 를 하기 전에는 SSH를
msgid "Your name"
msgstr "귀하의 이름"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "일"
diff --git a/locale/nl_NL/gitlab.po b/locale/nl_NL/gitlab.po
index 250d3bd413c..45a444fac43 100644
--- a/locale/nl_NL/gitlab.po
+++ b/locale/nl_NL/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:20-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:43-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Dutch\n"
"Language: nl_NL\n"
@@ -18,17 +18,20 @@ msgstr ""
msgid "%d commit"
msgid_plural "%d commits"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d commit"
+msgstr[1] "%d commits"
msgid "%s additional commit has been omitted to prevent performance issues."
msgid_plural "%s additional commits have been omitted to prevent performance issues."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%s andere commit is weggelaten om prestatieproblemen te voorkomen."
+msgstr[1] "%s andere commits zijn weggelaten om prestatieproblemen te voorkomen."
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr ""
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr ""
@@ -44,60 +47,63 @@ msgstr[0] ""
msgstr[1] ""
msgid "(checkout the %{link} for information on how to install it)."
-msgstr ""
+msgstr "(bekijk de %{link} voor meer info over hoe je het kan installeren)."
msgid "1 pipeline"
msgid_plural "%d pipelines"
msgstr[0] ""
msgstr[1] ""
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr ""
msgid "About auto deploy"
-msgstr ""
+msgstr "Over auto deploy"
msgid "Abuse Reports"
-msgstr ""
+msgstr "Misbruik rapporten"
msgid "Access Tokens"
-msgstr ""
+msgstr "Toegangstokens"
msgid "Access to failing storages has been temporarily disabled to allow the mount to recover. Reset storage information after the issue has been resolved to allow access again."
msgstr ""
msgid "Account"
-msgstr ""
+msgstr "Account"
msgid "Active"
-msgstr ""
+msgstr "Actief"
msgid "Activity"
-msgstr ""
+msgstr "Activiteit"
msgid "Add Changelog"
-msgstr ""
+msgstr "Changelog toevoegen"
msgid "Add Contribution guide"
msgstr ""
msgid "Add License"
-msgstr ""
+msgstr "Licentie toevoegen"
msgid "Add an SSH key to your profile to pull or push via SSH."
msgstr ""
msgid "Add new directory"
-msgstr ""
+msgstr "Nieuwe map toevoegen"
msgid "All"
-msgstr ""
+msgstr "Alles"
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
-msgstr ""
+msgstr "Applicaties"
msgid "Archived project! Repository is read-only"
msgstr ""
@@ -117,10 +123,34 @@ msgstr ""
msgid "Are you sure?"
msgstr ""
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr ""
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -177,6 +207,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] ""
@@ -192,34 +225,118 @@ msgid "BranchSwitcherTitle|Switch branch"
msgstr ""
msgid "Branches"
+msgstr "Branches"
+
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
msgstr ""
msgid "Browse Directory"
-msgstr ""
+msgstr "Bladeren in map"
msgid "Browse File"
-msgstr ""
+msgstr "Bekijk bestand"
msgid "Browse Files"
-msgstr ""
+msgstr "Door bestanden bladeren"
msgid "Browse files"
-msgstr ""
+msgstr "Door bestanden bladeren"
msgid "ByAuthor|by"
-msgstr ""
+msgstr "door"
msgid "CI / CD"
-msgstr ""
+msgstr "CI / CD"
msgid "CI configuration"
-msgstr ""
+msgstr "CI Configuratie"
msgid "Cancel"
-msgstr ""
+msgstr "Annuleren"
msgid "Cancel edit"
-msgstr ""
+msgstr "Bewerken annuleren"
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr ""
@@ -237,25 +354,25 @@ msgid "Changelog"
msgstr ""
msgid "Charts"
-msgstr ""
+msgstr "Grafieken"
msgid "Chat"
-msgstr ""
+msgstr "Chat"
msgid "Cherry-pick this commit"
-msgstr ""
+msgstr "Cherry-pick deze commit"
msgid "Cherry-pick this merge request"
msgstr ""
msgid "CiStatusLabel|canceled"
-msgstr ""
+msgstr "geannuleerd"
msgid "CiStatusLabel|created"
-msgstr ""
+msgstr "gemaakt"
msgid "CiStatusLabel|failed"
-msgstr ""
+msgstr "mislukt"
msgid "CiStatusLabel|manual action"
msgstr ""
@@ -270,40 +387,40 @@ msgid "CiStatusLabel|pending"
msgstr ""
msgid "CiStatusLabel|skipped"
-msgstr ""
+msgstr "overgeslagen"
msgid "CiStatusLabel|waiting for manual action"
msgstr ""
msgid "CiStatusText|blocked"
-msgstr ""
+msgstr "geblokkeerd"
msgid "CiStatusText|canceled"
msgstr ""
msgid "CiStatusText|created"
-msgstr ""
+msgstr "gemaakt"
msgid "CiStatusText|failed"
msgstr ""
msgid "CiStatusText|manual"
-msgstr ""
+msgstr "handmatig"
msgid "CiStatusText|passed"
-msgstr ""
+msgstr "geslaagd"
msgid "CiStatusText|pending"
msgstr ""
msgid "CiStatusText|skipped"
-msgstr ""
+msgstr "overgeslagen"
msgid "CiStatus|running"
msgstr ""
msgid "Comments"
-msgstr ""
+msgstr "Opmerkingen"
msgid "Commit"
msgid_plural "Commits"
@@ -317,28 +434,25 @@ msgid "Commit message"
msgstr ""
msgid "CommitBoxTitle|Commit"
-msgstr ""
+msgstr "Commit"
msgid "CommitMessage|Add %{file_name}"
-msgstr ""
+msgstr "%{file_name} toevoegen"
msgid "Commits"
-msgstr ""
+msgstr "Commits"
msgid "Commits feed"
msgstr ""
msgid "Commits|History"
-msgstr ""
+msgstr "Geschiedenis"
msgid "Committed by"
-msgstr ""
+msgstr "Gecommit door"
msgid "Compare"
-msgstr ""
-
-msgid "Container Registry"
-msgstr ""
+msgstr "Vergelijk"
msgid "Contribution guide"
msgstr ""
@@ -365,7 +479,7 @@ msgid "Create a personal access token on your account to pull or push via %{prot
msgstr ""
msgid "Create directory"
-msgstr ""
+msgstr "Maak map aan"
msgid "Create empty bare repository"
msgstr ""
@@ -489,6 +603,9 @@ msgstr ""
msgid "Emails"
msgstr ""
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr ""
@@ -516,6 +633,9 @@ msgstr ""
msgid "Every week (Sundays at 4:00am)"
msgstr ""
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -572,7 +692,28 @@ msgstr ""
msgid "GoToYourFork|Fork"
msgstr ""
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
@@ -593,12 +734,6 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
-msgid "Home"
-msgstr ""
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr ""
@@ -620,6 +755,9 @@ msgstr ""
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr ""
@@ -684,6 +822,9 @@ msgstr ""
msgid "Merge events"
msgstr ""
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr ""
@@ -698,8 +839,8 @@ msgstr ""
msgid "New Issue"
msgid_plural "New Issues"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Nieuwe issue"
+msgstr[1] "Nieuwe issues"
msgid "New Pipeline Schedule"
msgstr ""
@@ -812,6 +953,18 @@ msgstr ""
msgid "Owner"
msgstr ""
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -917,10 +1070,7 @@ msgstr ""
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -953,12 +1103,6 @@ msgstr ""
msgid "Project export started. A download link will be sent by email."
msgstr ""
-msgid "Project home"
-msgstr ""
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr ""
@@ -983,27 +1127,30 @@ msgstr ""
msgid "ProjectNetworkGraph|Graph"
msgstr ""
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr ""
@@ -1019,6 +1166,9 @@ msgstr ""
msgid "RefSwitcher|Tags"
msgstr ""
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr ""
@@ -1073,6 +1223,9 @@ msgstr ""
msgid "Schedule a new pipeline"
msgstr ""
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr ""
@@ -1112,6 +1265,12 @@ msgstr ""
msgid "Settings"
msgstr ""
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] ""
@@ -1120,6 +1279,102 @@ msgstr[1] ""
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr ""
@@ -1132,6 +1387,9 @@ msgstr ""
msgid "StarProject|Star"
msgstr ""
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
@@ -1141,6 +1399,9 @@ msgstr ""
msgid "Switch branch/tag"
msgstr ""
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] ""
@@ -1206,6 +1467,9 @@ msgstr ""
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -1381,9 +1645,15 @@ msgstr ""
msgid "Use your global notification setting"
msgstr ""
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr ""
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr ""
@@ -1456,6 +1726,12 @@ msgstr ""
msgid "Your name"
msgstr ""
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] ""
diff --git a/locale/pt_BR/gitlab.po b/locale/pt_BR/gitlab.po
index 5469f77d950..318c719c2ed 100644
--- a/locale/pt_BR/gitlab.po
+++ b/locale/pt_BR/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:18-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:42-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
@@ -29,6 +29,9 @@ msgstr[1] "%s commits adicionais foram omitidos para prevenir problemas de perfo
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_author_link} fez commit %{commit_timeago}"
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr ""
@@ -51,6 +54,9 @@ msgid_plural "%d pipelines"
msgstr[0] ""
msgstr[1] ""
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Uma coleção de gráficos sobre Integração Contínua"
@@ -93,7 +99,7 @@ msgstr "Adicionar novo diretório"
msgid "All"
msgstr ""
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
@@ -117,10 +123,34 @@ msgstr ""
msgid "Are you sure?"
msgstr ""
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Para anexar arquivo, arraste e solte ou %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -177,6 +207,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] ""
@@ -194,6 +227,90 @@ msgstr "Mudar de branch"
msgid "Branches"
msgstr ""
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "Navegar no Diretório"
@@ -337,9 +454,6 @@ msgstr "Commit feito por"
msgid "Compare"
msgstr "Comparar"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "Guia de contribuição"
@@ -489,6 +603,9 @@ msgstr "Alterar Agendamento do Pipeline %{id}"
msgid "Emails"
msgstr ""
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr ""
@@ -516,6 +633,9 @@ msgstr "Todos os meses (no dia primeiro às 4:00)"
msgid "Every week (Sundays at 4:00am)"
msgstr "Toda semana (domingos às 4:00)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Erro ao alterar o proprietário"
@@ -572,7 +692,28 @@ msgstr "Ir para seu fork"
msgid "GoToYourFork|Fork"
msgstr "Fork"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
@@ -593,12 +734,6 @@ msgstr ""
msgid "HealthCheck|Unhealthy"
msgstr ""
-msgid "Home"
-msgstr "Início"
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "Manutenção iniciada com sucesso"
@@ -620,6 +755,9 @@ msgstr ""
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "Desabilitado"
@@ -684,6 +822,9 @@ msgstr ""
msgid "Merge events"
msgstr ""
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr ""
@@ -812,6 +953,18 @@ msgstr ""
msgid "Owner"
msgstr "Proprietário"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -917,10 +1070,7 @@ msgstr "com etapas"
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -953,12 +1103,6 @@ msgstr "O link para a exportação do projeto expirou. Favor gerar uma nova expo
msgid "Project export started. A download link will be sent by email."
msgstr "Exportação do projeto iniciada. Um link para baixá-la será enviado por email."
-msgid "Project home"
-msgstr "Página inicial do projeto"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr ""
@@ -983,27 +1127,30 @@ msgstr "Etapa"
msgid "ProjectNetworkGraph|Graph"
msgstr "Árvore"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr ""
@@ -1019,6 +1166,9 @@ msgstr "Branches"
msgid "RefSwitcher|Tags"
msgstr "Tags"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "Commits Relacionados"
@@ -1073,6 +1223,9 @@ msgstr "Salvar agendamento da pipeline"
msgid "Schedule a new pipeline"
msgstr "Agendar nova pipeline"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "Agendando pipelines"
@@ -1112,6 +1265,12 @@ msgstr "defina uma senha"
msgid "Settings"
msgstr ""
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "Mostrando %d evento"
@@ -1120,6 +1279,102 @@ msgstr[1] "Mostrando %d eventos"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "Código-fonte"
@@ -1132,6 +1387,9 @@ msgstr ""
msgid "StarProject|Star"
msgstr "Marcar"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "Iniciar um %{new_merge_request} a partir dessas alterações"
@@ -1141,6 +1399,9 @@ msgstr ""
msgid "Switch branch/tag"
msgstr "Trocar branch/tag"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] ""
@@ -1206,6 +1467,9 @@ msgstr "O valor situado no ponto médio de uma série de valores observados. Ex.
msgid "There are problems accessing Git storage: "
msgstr ""
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Isto significa que você não pode entregar código até que crie um repositório vazio ou importe um existente."
@@ -1381,9 +1645,15 @@ msgstr ""
msgid "Use your global notification setting"
msgstr "Utilizar configuração de notificação global"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "Ver merge request aberto"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Interno"
@@ -1456,6 +1726,12 @@ msgstr "Você não conseguirá fazer pull ou push no projeto via SSH até que a
msgid "Your name"
msgstr "Seu nome"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "dia"
diff --git a/locale/ru/gitlab.po b/locale/ru/gitlab.po
index 808bc9dedce..507dc187cdb 100644
--- a/locale/ru/gitlab.po
+++ b/locale/ru/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:19-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:43-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
@@ -31,23 +31,26 @@ msgstr[2] "%s добавленные коммиты были исключены
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_author_link} коммичено %{commit_timeago}"
-msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
msgstr ""
+msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
+msgstr "%{number_of_failures} из %{maximum_failures} возможных попыток. Вы можете попытаться еще раз."
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds."
-msgstr ""
+msgstr "%{number_of_failures} из %{maximum_failures} возможных неудачных попыток. GitLab заблокирует доступ на %{number_of_seconds} секунд."
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved."
-msgstr ""
+msgstr "%{number_of_failures} из %{maximum_failures} возможных неудачных попыток. GitLab не будет автоматически повторять попытку. Сбросьте информацию хранилища после устранения проблемы."
msgid "%{storage_name}: failed storage access attempt on host:"
msgid_plural "%{storage_name}: %{failed_attempts} failed storage access attempts:"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%{storage_name}: неудачная попытка доступа к хранилищу на хосте:"
+msgstr[1] "%{storage_name}: %{failed_attempts} - неудачные попытки доступа к хранилищу:"
+msgstr[2] "%{storage_name}: %{failed_attempts} - неудачные попытки доступа к хранилищу:"
msgid "(checkout the %{link} for information on how to install it)."
-msgstr ""
+msgstr "(перейдите по ссылке %{link} для получения информации об установке)."
msgid "1 pipeline"
msgid_plural "%d pipelines"
@@ -55,23 +58,26 @@ msgstr[0] "1 конвейер"
msgstr[1] "%d конвейеры"
msgstr[2] "%d конвейеры"
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Графики относительно непрерывной интеграции"
msgid "About auto deploy"
-msgstr "Автоматическое развертывание"
+msgstr "Об автоматическом развёртывании"
msgid "Abuse Reports"
-msgstr ""
+msgstr "Отчёты о Жалобах"
msgid "Access Tokens"
-msgstr ""
+msgstr "Токены Доступа"
msgid "Access to failing storages has been temporarily disabled to allow the mount to recover. Reset storage information after the issue has been resolved to allow access again."
-msgstr ""
+msgstr "Доступ к вышедшим из строя хранилищам временно отключен для возможности монтирования в целях восстановления. Сбросьте информацию о хранилищах после устранения проблемы, чтобы разрешить доступ."
msgid "Account"
-msgstr ""
+msgstr "Учетная запись"
msgid "Active"
msgstr "Активный"
@@ -95,13 +101,13 @@ msgid "Add new directory"
msgstr "Добавить каталог"
msgid "All"
-msgstr ""
+msgstr "Все"
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
-msgstr ""
+msgstr "Приложения"
msgid "Archived project! Repository is read-only"
msgstr "Архивный проект! Репозиторий доступен только для чтения"
@@ -113,18 +119,42 @@ msgid "Are you sure you want to discard your changes?"
msgstr "Вы уверены, что Вы хотите отменить Ваши изменения?"
msgid "Are you sure you want to reset registration token?"
-msgstr ""
+msgstr "Вы уверены, что Вы хотите сбросить этот ключ регистрации?"
msgid "Are you sure you want to reset the health check token?"
-msgstr ""
+msgstr "Вы уверены, что Вы хотите сбросить этот ключ проверки работоспособности?"
msgid "Are you sure?"
msgstr "Вы уверены?"
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Приложить файл через drag & drop или %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -181,6 +211,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] "Ветка"
@@ -199,6 +232,90 @@ msgstr "Переключить ветку"
msgid "Branches"
msgstr "Ветки"
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "Обзор"
@@ -215,7 +332,7 @@ msgid "ByAuthor|by"
msgstr "по автору"
msgid "CI / CD"
-msgstr ""
+msgstr "CI / CD"
msgid "CI configuration"
msgstr "Настройка CI"
@@ -245,7 +362,7 @@ msgid "Charts"
msgstr "Диаграммы"
msgid "Chat"
-msgstr ""
+msgstr "Чат"
msgid "Cherry-pick this commit"
msgstr "Подобрать в этом коммите"
@@ -343,9 +460,6 @@ msgstr "Фиксировано"
msgid "Compare"
msgstr "Сравнить"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "Руководство участника"
@@ -443,13 +557,13 @@ msgstr[1] "Размещение"
msgstr[2] "Размещение"
msgid "Deploy Keys"
-msgstr ""
+msgstr "Ключи Развертывания"
msgid "Description"
msgstr "Описание"
msgid "Details"
-msgstr ""
+msgstr "Подробная информация"
msgid "Directory name"
msgstr "Каталог"
@@ -494,25 +608,28 @@ msgid "Edit Pipeline Schedule %{id}"
msgstr "Изменить расписание конвейера %{id}"
msgid "Emails"
+msgstr "Email-адреса"
+
+msgid "Enable in settings"
msgstr ""
msgid "EventFilterBy|Filter by all"
-msgstr ""
+msgstr "Фильтр по всему"
msgid "EventFilterBy|Filter by comments"
-msgstr ""
+msgstr "Фильтр по комментарию"
msgid "EventFilterBy|Filter by issue events"
-msgstr ""
+msgstr "Фильтр по событиям обсуждений"
msgid "EventFilterBy|Filter by merge events"
-msgstr ""
+msgstr "Фильтр по событиям слияний"
msgid "EventFilterBy|Filter by push events"
-msgstr ""
+msgstr "Фильтр по событиям отправки"
msgid "EventFilterBy|Filter by team"
-msgstr ""
+msgstr "Фильтр по команде"
msgid "Every day (at 4:00am)"
msgstr "Ежедневно (в 4:00)"
@@ -523,6 +640,9 @@ msgstr "Ежемесячно (каждое 1-е число в 4:00)"
msgid "Every week (Sundays at 4:00am)"
msgstr "Еженедельно (по воскресениями в 4:00)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Не удалось изменить владельца"
@@ -563,13 +683,13 @@ msgid "From merge request merge until deploy to production"
msgstr "От запроса на слияние до развертывания в рабочей среде"
msgid "GPG Keys"
-msgstr ""
+msgstr "GPG Ключи"
msgid "Geo Nodes"
msgstr ""
msgid "Git storage health information has been reset"
-msgstr ""
+msgstr "Информация о стабильности Git хранилища была сброшена"
msgid "GitLab Runner section"
msgstr "Секция Gitlab Runner"
@@ -580,32 +700,47 @@ msgstr "Перейти к вашему форку"
msgid "GoToYourFork|Fork"
msgstr "Форк"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
-msgstr ""
+msgstr "Проверка работоспособности"
msgid "Health information can be retrieved from the following endpoints. More information is available"
-msgstr ""
+msgstr "Информация о работоспособности может быть получена из следующих точек подключения. Доступна более подробная информация"
msgid "HealthCheck|Access token is"
-msgstr ""
+msgstr "Ключ доступа - "
msgid "HealthCheck|Healthy"
-msgstr ""
+msgstr "Стабильно"
msgid "HealthCheck|No Health Problems Detected"
-msgstr ""
+msgstr "Проблем работоспособности не обнаружено"
msgid "HealthCheck|Unhealthy"
-msgstr ""
-
-msgid "Home"
-msgstr "Главная"
-
-msgid "Hooks"
-msgstr ""
+msgstr "Нестабильный"
msgid "Housekeeping successfully started"
msgstr "Очистка успешно запущена"
@@ -623,9 +758,12 @@ msgid "Introducing Cycle Analytics"
msgstr "Внедрение Цикла Аналитик"
msgid "Issue events"
-msgstr ""
+msgstr "События задачи"
msgid "Issues"
+msgstr "Задачи"
+
+msgid "Jobs"
msgstr ""
msgid "LFSStatus|Disabled"
@@ -635,7 +773,7 @@ msgid "LFSStatus|Enabled"
msgstr "Включено"
msgid "Labels"
-msgstr ""
+msgstr "Метки"
msgid "Last %d day"
msgid_plural "Last %d days"
@@ -653,10 +791,10 @@ msgid "Last commit"
msgstr "Последний коммит"
msgid "LastPushEvent|You pushed to"
-msgstr ""
+msgstr "Вы отправили в"
msgid "LastPushEvent|at"
-msgstr ""
+msgstr "в"
msgid "Learn more in the"
msgstr "Узнайте больше в"
@@ -686,25 +824,28 @@ msgid "Median"
msgstr "Среднее"
msgid "Members"
-msgstr ""
+msgstr "Участники"
msgid "Merge Requests"
-msgstr ""
+msgstr "Запросы на Слияние"
msgid "Merge events"
+msgstr "События слияний"
+
+msgid "Merge request"
msgstr ""
msgid "Messages"
-msgstr ""
+msgstr "Сообщения"
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "добавить ключ SSH"
msgid "Monitoring"
-msgstr ""
+msgstr "Мониторинг"
msgid "More information is available|here"
-msgstr ""
+msgstr "Больше информации доступно|тут"
msgid "New Issue"
msgid_plural "New Issues"
@@ -806,7 +947,7 @@ msgid "NotificationLevel|Watch"
msgstr "Отслеживать"
msgid "Notifications"
-msgstr ""
+msgstr "Уведомления"
msgid "OfSearchInADropdown|Filter"
msgstr "Фильтр"
@@ -818,14 +959,26 @@ msgid "Options"
msgstr "Настройки"
msgid "Overview"
-msgstr ""
+msgstr "Обзор"
msgid "Owner"
msgstr "Владелец"
-msgid "Password"
+msgid "Pagination|Last »"
msgstr ""
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
+msgid "Password"
+msgstr "Пароль"
+
msgid "Pipeline"
msgstr "Конвейер"
@@ -905,13 +1058,13 @@ msgid "Pipelines charts"
msgstr "Диаграмма конвейера"
msgid "Pipelines for last month"
-msgstr ""
+msgstr "Конвеер за последний месяц"
msgid "Pipelines for last week"
-msgstr ""
+msgstr "Конвеер за последнюю неделю"
msgid "Pipelines for last year"
-msgstr ""
+msgstr "Конвееры за последний год"
msgid "Pipeline|all"
msgstr "все"
@@ -926,12 +1079,9 @@ msgid "Pipeline|with stages"
msgstr "со стадиями"
msgid "Preferences"
-msgstr ""
+msgstr "Предпочтения"
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -950,7 +1100,7 @@ msgid "Project access must be granted explicitly to each user."
msgstr "Доступ к проекту должен предоставляться явно каждому пользователю."
msgid "Project details"
-msgstr ""
+msgstr "Детали проекта"
msgid "Project export could not be deleted."
msgstr "Невозможно удалить экспорт проекта."
@@ -964,14 +1114,8 @@ msgstr "Истек срок действия ссылки на проект. С
msgid "Project export started. A download link will be sent by email."
msgstr "Начат экспорт проекта. Ссылка для скачивания будет отправлена по электронной почте."
-msgid "Project home"
-msgstr "Домашняя страница"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
-msgstr ""
+msgstr "Подписаться"
msgid "ProjectFeature|Disabled"
msgstr "Отключено"
@@ -994,35 +1138,38 @@ msgstr "Этап"
msgid "ProjectNetworkGraph|Graph"
msgstr "Граф"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
+msgstr "Загрузка проектов"
+
+msgid "ProjectsDropdown|Projects you visit often will appear here"
+msgstr "Проекты, которые вы часто посещаете, будут отображаться здесь"
+
+msgid "ProjectsDropdown|Search your projects"
+msgstr "Поиск по вашим проектам"
+
+msgid "ProjectsDropdown|Something went wrong on our end."
msgstr ""
msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
-msgid "ProjectsDropdown|Projects you visit often will appear here"
-msgstr ""
-
-msgid "ProjectsDropdown|Search your projects"
-msgstr ""
-
-msgid "ProjectsDropdown|Something went wrong on our end"
-msgstr ""
+msgstr "К сожалению, по вашему запросу проекты не найдены"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
+msgstr "Эта функциональность требует поддержки localStorage в вашем браузере"
+
+msgid "Push Rules"
msgstr ""
msgid "Push events"
-msgstr ""
+msgstr "События отправки"
msgid "Read more"
msgstr "Подробнее"
msgid "Readme"
-msgstr ""
+msgstr "Инструкция"
msgid "RefSwitcher|Branches"
msgstr "Ветки"
@@ -1030,6 +1177,9 @@ msgstr "Ветки"
msgid "RefSwitcher|Tags"
msgstr "Теги"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "Связанные коммиты"
@@ -1055,19 +1205,19 @@ msgid "Remove project"
msgstr "Удалить проект"
msgid "Repository"
-msgstr ""
+msgstr "Репозиторий"
msgid "Request Access"
msgstr "Запрос доступа"
msgid "Reset git storage health information"
-msgstr ""
+msgstr "Сбросить информацию о работоспособности репозитория git"
msgid "Reset health check access token"
-msgstr ""
+msgstr "Сбросить ключ доступа проверки работоспособности"
msgid "Reset runners registration token"
-msgstr ""
+msgstr "Сбросить ключ регистрации Gitlab Runners"
msgid "Revert this commit"
msgstr "Отменить это изменение"
@@ -1076,7 +1226,7 @@ msgid "Revert this merge request"
msgstr "Отменить этот запрос на слияние"
msgid "SSH Keys"
-msgstr ""
+msgstr "SSH Ключи"
msgid "Save pipeline schedule"
msgstr "Сохранить расписание конвейра"
@@ -1084,6 +1234,9 @@ msgstr "Сохранить расписание конвейра"
msgid "Schedule a new pipeline"
msgstr "Расписание нового конвейера"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "Планирование конвейеров"
@@ -1097,13 +1250,13 @@ msgid "Select a timezone"
msgstr "Выбор временной зоны"
msgid "Select existing branch"
-msgstr ""
+msgstr "Выбрать существующую ветвь"
msgid "Select target branch"
msgstr "Выбор целевой ветки"
msgid "Service Templates"
-msgstr ""
+msgstr "Шаблоны Служб"
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "Установите пароль в своем аккаунте, чтобы отправлять или получать код через %{protocol}."
@@ -1121,6 +1274,12 @@ msgid "SetPasswordToCloneLink|set a password"
msgstr "установить пароль"
msgid "Settings"
+msgstr "Настройки"
+
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
msgstr ""
msgid "Showing %d event"
@@ -1130,29 +1289,131 @@ msgstr[1] "Показано %d событий"
msgstr[2] "Показано %d событий"
msgid "Snippets"
+msgstr "Сниппеты"
+
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
msgstr ""
msgid "Source code"
msgstr "Исходный код"
msgid "Spam Logs"
-msgstr ""
+msgstr "Спам Логи"
msgid "Specify the following URL during the Runner setup:"
-msgstr ""
+msgstr "Укажите следующий URL во время настройки Gitlab Runner:"
msgid "StarProject|Star"
msgstr "Отметить"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "Начать %{new_merge_request} с этих изменений"
msgid "Start the Runner!"
-msgstr ""
+msgstr "Запустить GitLab Runner!"
msgid "Switch branch/tag"
msgstr "Переключить ветка/тег"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "Тег"
@@ -1166,7 +1427,7 @@ msgid "Target Branch"
msgstr "Ветка"
msgid "Team"
-msgstr ""
+msgstr "Команда"
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "На этапе написания кода показывает время первого коммита до создания запроса на слияние. Данные автоматически добавятся после того, как вы создать свой первый запрос на слияние."
@@ -1217,6 +1478,9 @@ msgid "The value lying at the midpoint of a series of observed values. E.g., bet
msgstr "Среднее значение в ряду. Пример: между 3, 5, 9, среднее 5, между 3, 5, 7, 8, среднее (5+7)/2 = 6."
msgid "There are problems accessing Git storage: "
+msgstr "Проблемы с доступом к Git хранилищу: "
+
+msgid "This is the author's first Merge Request to this project. Handle with care."
msgstr ""
msgid "This means you can not push code until you create an empty repository or import existing one."
@@ -1391,14 +1655,20 @@ msgid "UploadLink|click to upload"
msgstr "кликните для загрузки"
msgid "Use the following registration token during setup:"
-msgstr ""
+msgstr "Используйте следующий токен регистрации в процессе установки:"
msgid "Use your global notification setting"
msgstr "Используются глобальный настройки уведомлений"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "Просмотреть открытый запрос на слияние"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Ограниченный"
@@ -1418,7 +1688,7 @@ msgid "We don't have enough data to show this stage."
msgstr "Информация по этапу отсутствует."
msgid "Wiki"
-msgstr ""
+msgstr "Wiki"
msgid "Withdraw Access Request"
msgstr "Отменить запрос доступа"
@@ -1471,6 +1741,12 @@ msgstr "Вы не сможете получать и отправлять код
msgid "Your name"
msgstr "Ваше имя"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "день"
diff --git a/locale/uk/gitlab.po b/locale/uk/gitlab.po
index 1dc42901daf..ffbbe88cc51 100644
--- a/locale/uk/gitlab.po
+++ b/locale/uk/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:20-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:43-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\n"
@@ -31,23 +31,26 @@ msgstr[2] "%s доданих коммітів були виключені для
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_author_link} комміт %{commit_timeago}"
-msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
msgstr ""
+msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
+msgstr "%{number_of_failures} від %{maximum_failures} невдач. GitLab надасть доступ на наступну спробу."
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will block access for %{number_of_seconds} seconds."
-msgstr ""
+msgstr "%{number_of_failures} із %{maximum_failures} невдач. GitLab заблокує доступ на %{number_of_seconds} секунд."
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will not retry automatically. Reset storage information when the problem is resolved."
-msgstr ""
+msgstr "%{number_of_failures} від %{maximum_failures} невдач. GitLab автоматично не повторюватиме спробу. Скиньте інформацію сховища при усуненні проблеми."
msgid "%{storage_name}: failed storage access attempt on host:"
msgid_plural "%{storage_name}: %{failed_attempts} failed storage access attempts:"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%{storage_name}: спроба невдалого доступу до сховища на хості:"
+msgstr[1] "%{storage_name}: %{failed_attempts} невдалі спроби доступу до сховища:"
+msgstr[2] "%{storage_name}: %{failed_attempts} невдалих спроб доступу до сховища:"
msgid "(checkout the %{link} for information on how to install it)."
-msgstr ""
+msgstr "(перейдіть за посиланням %{link} для отримання інформації стосовно встановлення)."
msgid "1 pipeline"
msgid_plural "%d pipelines"
@@ -55,6 +58,9 @@ msgstr[0] "1 конвеєр"
msgstr[1] "%d конвеєра"
msgstr[2] "%d конвеєрів"
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "Це набір графічних елементів для безперервної інтеграції"
@@ -62,16 +68,16 @@ msgid "About auto deploy"
msgstr "Про авто розгортання"
msgid "Abuse Reports"
-msgstr ""
+msgstr "Звіти про зловживання"
msgid "Access Tokens"
-msgstr ""
+msgstr "Токени доступу"
msgid "Access to failing storages has been temporarily disabled to allow the mount to recover. Reset storage information after the issue has been resolved to allow access again."
-msgstr ""
+msgstr "Доступ до помилкових сховищ тимчасово відключений для можливості монтування та відновлення. Скиньте інформацію про сховища після усунення проблеми, щоб дозволити доступ."
msgid "Account"
-msgstr ""
+msgstr "Обліковий запис"
msgid "Active"
msgstr "Активний"
@@ -97,11 +103,11 @@ msgstr "Додати новий каталог"
msgid "All"
msgstr "Всі"
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
-msgstr ""
+msgstr "Додатки"
msgid "Archived project! Repository is read-only"
msgstr "Заархівований проект! Репозиторій доступний лише для читання"
@@ -116,15 +122,39 @@ msgid "Are you sure you want to reset registration token?"
msgstr "Ви впевнені, що бажаєте скинути реєстраційний токен?"
msgid "Are you sure you want to reset the health check token?"
-msgstr ""
+msgstr "Ви впевнені, що Ви хочете скинути цей ключ перевірки працездатності?"
msgid "Are you sure?"
+msgstr "Ви впевнені?"
+
+msgid "Artifacts"
msgstr ""
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "Прикріпити файл за допомогою перетягування або %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -181,6 +211,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] "Гілка"
@@ -199,6 +232,90 @@ msgstr "Переключити гілку"
msgid "Branches"
msgstr "Гілки"
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "Переглянути каталог"
@@ -215,7 +332,7 @@ msgid "ByAuthor|by"
msgstr "від"
msgid "CI / CD"
-msgstr ""
+msgstr "CI / CD"
msgid "CI configuration"
msgstr "Налаштування CI"
@@ -224,7 +341,7 @@ msgid "Cancel"
msgstr "Скасувати"
msgid "Cancel edit"
-msgstr ""
+msgstr "Відмінити правку"
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "Вибрати в гілці"
@@ -245,7 +362,7 @@ msgid "Charts"
msgstr "Графіки"
msgid "Chat"
-msgstr ""
+msgstr "Чат"
msgid "Cherry-pick this commit"
msgstr "Cherry-pick в цьому комміті"
@@ -308,7 +425,7 @@ msgid "CiStatus|running"
msgstr "виконується"
msgid "Comments"
-msgstr ""
+msgstr "Коментарі"
msgid "Commit"
msgid_plural "Commits"
@@ -343,9 +460,6 @@ msgstr "Комміт від"
msgid "Compare"
msgstr "Порівняти"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "Керівництво контриб’юторів"
@@ -365,7 +479,7 @@ msgid "Create New Directory"
msgstr "Створити новий каталог"
msgid "Create a new branch"
-msgstr ""
+msgstr "Створити нову гілку"
msgid "Create a personal access token on your account to pull or push via %{protocol}."
msgstr "Створити токен доступу для вашого аккауета, щоб відправляти або отримувати через %{protocol}."
@@ -443,19 +557,19 @@ msgstr[1] "Розгортання"
msgstr[2] "Розгортань"
msgid "Deploy Keys"
-msgstr ""
+msgstr "Ключи для розгортування"
msgid "Description"
msgstr "Опис"
msgid "Details"
-msgstr ""
+msgstr "Деталі"
msgid "Directory name"
msgstr "Ім'я каталогу"
msgid "Discard changes"
-msgstr ""
+msgstr "Скасувати зміни"
msgid "Don't show again"
msgstr "Не показувати знову"
@@ -494,25 +608,28 @@ msgid "Edit Pipeline Schedule %{id}"
msgstr "Редагувати Розклад Конвеєра %{id}"
msgid "Emails"
+msgstr "Адреси електронної пошти"
+
+msgid "Enable in settings"
msgstr ""
msgid "EventFilterBy|Filter by all"
-msgstr ""
+msgstr "Всі"
msgid "EventFilterBy|Filter by comments"
-msgstr ""
+msgstr "Коментарю"
msgid "EventFilterBy|Filter by issue events"
-msgstr ""
+msgstr "Проблеми"
msgid "EventFilterBy|Filter by merge events"
-msgstr ""
+msgstr "Запити на злиття"
msgid "EventFilterBy|Filter by push events"
-msgstr ""
+msgstr "По відправленні комміту"
msgid "EventFilterBy|Filter by team"
-msgstr ""
+msgstr "За командою"
msgid "Every day (at 4:00am)"
msgstr "Кожен день (в 4:00 ранку)"
@@ -523,6 +640,9 @@ msgstr "Кожен місяць (1-го числа о 4:00 ранку)"
msgid "Every week (Sundays at 4:00am)"
msgstr "Щотижня (в неділю о 4:00 ранку)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Не вдалося змінити власника"
@@ -563,16 +683,16 @@ msgid "From merge request merge until deploy to production"
msgstr "З об'єднання запиту злиття до розгортання на ПРОД"
msgid "GPG Keys"
-msgstr ""
+msgstr "GPG ключі"
msgid "Geo Nodes"
msgstr ""
msgid "Git storage health information has been reset"
-msgstr ""
+msgstr "Інформація про статус зберігання Git була скинута"
msgid "GitLab Runner section"
-msgstr ""
+msgstr "Розділ GitLab Runner"
msgid "Go to your fork"
msgstr "Перейти до вашого форку"
@@ -580,32 +700,47 @@ msgstr "Перейти до вашого форку"
msgid "GoToYourFork|Fork"
msgstr "Форк"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
-msgstr ""
+msgstr "Перевірки працездатності"
msgid "Health information can be retrieved from the following endpoints. More information is available"
-msgstr ""
+msgstr "Інформацію про працездатність можна отримати з наступних ендпойнтів. Більше інформації доступно"
msgid "HealthCheck|Access token is"
-msgstr ""
+msgstr "Токен доступу є"
msgid "HealthCheck|Healthy"
-msgstr ""
+msgstr "Здоровий"
msgid "HealthCheck|No Health Problems Detected"
-msgstr ""
+msgstr "Жодних проблем із здоров'ям не виявлено"
msgid "HealthCheck|Unhealthy"
-msgstr ""
-
-msgid "Home"
-msgstr "Головна"
-
-msgid "Hooks"
-msgstr ""
+msgstr "Нездорові"
msgid "Housekeeping successfully started"
msgstr "Очищення успішно розпочато"
@@ -614,7 +749,7 @@ msgid "Import repository"
msgstr "Імпорт репозеторія"
msgid "Install a Runner compatible with GitLab CI"
-msgstr ""
+msgstr "Встановіть Runner, сумісний з GitLab CI"
msgid "Interval Pattern"
msgstr "Шаблон інтервалу"
@@ -623,9 +758,12 @@ msgid "Introducing Cycle Analytics"
msgstr "Представляємо аналітику циклу"
msgid "Issue events"
-msgstr ""
+msgstr "Події проблем"
msgid "Issues"
+msgstr "Проблеми"
+
+msgid "Jobs"
msgstr ""
msgid "LFSStatus|Disabled"
@@ -635,7 +773,7 @@ msgid "LFSStatus|Enabled"
msgstr "Увімкнено"
msgid "Labels"
-msgstr ""
+msgstr "Мітки"
msgid "Last %d day"
msgid_plural "Last %d days"
@@ -653,10 +791,10 @@ msgid "Last commit"
msgstr "Останній комміт"
msgid "LastPushEvent|You pushed to"
-msgstr ""
+msgstr "Ви надіслали зміни до"
msgid "LastPushEvent|at"
-msgstr ""
+msgstr "в"
msgid "Learn more in the"
msgstr "Дізнайтесь більше"
@@ -686,25 +824,28 @@ msgid "Median"
msgstr "Медіана"
msgid "Members"
-msgstr ""
+msgstr "Користувачі"
msgid "Merge Requests"
-msgstr ""
+msgstr "Запит на злиття"
msgid "Merge events"
+msgstr "Події запит на злиття"
+
+msgid "Merge request"
msgstr ""
msgid "Messages"
-msgstr ""
+msgstr "Повідомлення"
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "не додасте SSH ключ"
msgid "Monitoring"
-msgstr ""
+msgstr "Моніторинг"
msgid "More information is available|here"
-msgstr ""
+msgstr "тут"
msgid "New Issue"
msgid_plural "New Issues"
@@ -806,7 +947,7 @@ msgid "NotificationLevel|Watch"
msgstr "Відстежувати"
msgid "Notifications"
-msgstr ""
+msgstr "Сповіщення"
msgid "OfSearchInADropdown|Filter"
msgstr "Фільтр"
@@ -818,14 +959,26 @@ msgid "Options"
msgstr "Параметри"
msgid "Overview"
-msgstr ""
+msgstr "Огляд"
msgid "Owner"
msgstr "Власник"
-msgid "Password"
+msgid "Pagination|Last »"
msgstr ""
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
+msgid "Password"
+msgstr "Пароль"
+
msgid "Pipeline"
msgstr "Конвеєр"
@@ -905,13 +1058,13 @@ msgid "Pipelines charts"
msgstr "Чарти Конвеєрів"
msgid "Pipelines for last month"
-msgstr ""
+msgstr "Конвеєри за останній місяць"
msgid "Pipelines for last week"
-msgstr ""
+msgstr "Конвеєри за останній тиждень"
msgid "Pipelines for last year"
-msgstr ""
+msgstr "Конвеєри за останній рік"
msgid "Pipeline|all"
msgstr "всі"
@@ -926,12 +1079,9 @@ msgid "Pipeline|with stages"
msgstr "зі стадіями"
msgid "Preferences"
-msgstr ""
+msgstr "Налаштування"
-msgid "Profile Settings"
-msgstr ""
-
-msgid "Project"
+msgid "Profile"
msgstr ""
msgid "Project '%{project_name}' queued for deletion."
@@ -950,7 +1100,7 @@ msgid "Project access must be granted explicitly to each user."
msgstr "Доступ до проекту повинен надаватися кожному користувачеві."
msgid "Project details"
-msgstr ""
+msgstr "Деталі проекту"
msgid "Project export could not be deleted."
msgstr "Неможливо видалити експорт проекту."
@@ -964,14 +1114,8 @@ msgstr "Закінчився термін дії посилання на про
msgid "Project export started. A download link will be sent by email."
msgstr "Розпочато експорт проекту. Посилання для скачування буде надіслана електронною поштою."
-msgid "Project home"
-msgstr "Домашня сторінка проекту"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
-msgstr ""
+msgstr "Підписатися"
msgid "ProjectFeature|Disabled"
msgstr "Вимкнено"
@@ -994,29 +1138,32 @@ msgstr "Етап"
msgid "ProjectNetworkGraph|Graph"
msgstr "Історія"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
+msgstr "Завантаження проектів"
+
+msgid "ProjectsDropdown|Projects you visit often will appear here"
+msgstr "Проекти, які ви часто відвідуєте, будуть відображені тут"
+
+msgid "ProjectsDropdown|Search your projects"
+msgstr "Пошук по ваших проектах"
+
+msgid "ProjectsDropdown|Something went wrong on our end."
msgstr ""
msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
-msgid "ProjectsDropdown|Projects you visit often will appear here"
-msgstr ""
-
-msgid "ProjectsDropdown|Search your projects"
-msgstr ""
-
-msgid "ProjectsDropdown|Something went wrong on our end"
-msgstr ""
+msgstr "На жаль, по вашоу запиту проектів не знайдено"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
+msgstr "Ця функція потребує підтримки localStorage вашим браузером"
+
+msgid "Push Rules"
msgstr ""
msgid "Push events"
-msgstr ""
+msgstr "Push події"
msgid "Read more"
msgstr "Докладніше"
@@ -1030,6 +1177,9 @@ msgstr "Гілки"
msgid "RefSwitcher|Tags"
msgstr "Теги"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "Пов'язані Комміти"
@@ -1055,19 +1205,19 @@ msgid "Remove project"
msgstr "Видалити проект"
msgid "Repository"
-msgstr ""
+msgstr "Репозиторій"
msgid "Request Access"
msgstr "Запит доступу"
msgid "Reset git storage health information"
-msgstr ""
+msgstr "Скиньте інформацію про працездатність сховища git"
msgid "Reset health check access token"
-msgstr ""
+msgstr "Скиньте токен доступу для перевірки перевірки працездатності"
msgid "Reset runners registration token"
-msgstr ""
+msgstr "Скинути реєстраційний токен runner-ів"
msgid "Revert this commit"
msgstr "Скасувати цей комміт"
@@ -1076,7 +1226,7 @@ msgid "Revert this merge request"
msgstr "Скасувати цей запит на злиття"
msgid "SSH Keys"
-msgstr ""
+msgstr "Ключі SSH"
msgid "Save pipeline schedule"
msgstr "Зберегти Розклад Конвеєра"
@@ -1084,6 +1234,9 @@ msgstr "Зберегти Розклад Конвеєра"
msgid "Schedule a new pipeline"
msgstr "Розклад нового конвеєра"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "Планування конвеєрів"
@@ -1097,13 +1250,13 @@ msgid "Select a timezone"
msgstr "Вибрати часовий пояс"
msgid "Select existing branch"
-msgstr ""
+msgstr "Виберіть гілку"
msgid "Select target branch"
msgstr "Вибір цільової гілки"
msgid "Service Templates"
-msgstr ""
+msgstr "Сервіс шаблонів"
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "Встановіть пароль свого облікового запису, щоб відправляти або отримувати код через %{protocol}."
@@ -1121,6 +1274,12 @@ msgid "SetPasswordToCloneLink|set a password"
msgstr "встановити пароль"
msgid "Settings"
+msgstr "Налаштування"
+
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
msgstr ""
msgid "Showing %d event"
@@ -1130,29 +1289,131 @@ msgstr[1] "Показано %d події"
msgstr[2] "Показано %d подій"
msgid "Snippets"
+msgstr "Фрагменти"
+
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
msgstr ""
msgid "Source code"
msgstr "Код"
msgid "Spam Logs"
-msgstr ""
+msgstr "Спам-журнал"
msgid "Specify the following URL during the Runner setup:"
-msgstr ""
+msgstr "Зазначте наступний URL під час встановлення Runner-а:"
msgid "StarProject|Star"
msgstr "Підписатися"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "Почати %{new_merge_request} з цих змін"
msgid "Start the Runner!"
-msgstr ""
+msgstr "Запустіть Runner!"
msgid "Switch branch/tag"
msgstr "тег"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "Тег"
@@ -1166,7 +1427,7 @@ msgid "Target Branch"
msgstr "Цільова гілка"
msgid "Team"
-msgstr ""
+msgstr "Команда"
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "На стадії написання коду, показує час першого комміту до створення запиту на об'єднання. Дані будуть автоматично додані після створення вашого першого запиту на об'єднання."
@@ -1217,6 +1478,9 @@ msgid "The value lying at the midpoint of a series of observed values. E.g., bet
msgstr "Середнє значення в рядку. Приклад: між 3, 5, 9, середніми 5, між 3, 5, 7, 8, середніми (5 + 7) / 2 = 6."
msgid "There are problems accessing Git storage: "
+msgstr "Є проблеми з доступом до сховища: "
+
+msgid "This is the author's first Merge Request to this project. Handle with care."
msgstr ""
msgid "This means you can not push code until you create an empty repository or import existing one."
@@ -1391,14 +1655,20 @@ msgid "UploadLink|click to upload"
msgstr "Натисніть, щоб завантажити"
msgid "Use the following registration token during setup:"
-msgstr ""
+msgstr "Використовувати токен під час установки:"
msgid "Use your global notification setting"
msgstr "Використовуються глобальні налаштування повідомлень"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "Перегляд відкритих запитів на злиття"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "Внутрішній"
@@ -1418,7 +1688,7 @@ msgid "We don't have enough data to show this stage."
msgstr "Ми не маємо достатньо даних для показу цього етапу."
msgid "Wiki"
-msgstr ""
+msgstr "Wiki"
msgid "Withdraw Access Request"
msgstr "Скасувати запит доступу"
@@ -1471,6 +1741,12 @@ msgstr "Ви не зможете отримувати і відправляти
msgid "Your name"
msgstr "Ваше ім'я"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "день"
diff --git a/locale/zh_CN/gitlab.po b/locale/zh_CN/gitlab.po
index d6f756e813f..4a05b159008 100644
--- a/locale/zh_CN/gitlab.po
+++ b/locale/zh_CN/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:21-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:44-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
@@ -27,6 +27,9 @@ msgstr[0] "为提高页面加载速度及性能,已省略了 %s 次提交。"
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "由 %{commit_author_link} 提交于 %{commit_timeago}"
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr "已失败 %{number_of_failures} 次/最多允许失败失败 %{maximum_failures} 次,GitLab 将继续重试。"
@@ -47,6 +50,9 @@ msgid "1 pipeline"
msgid_plural "%d pipelines"
msgstr[0] "%d 条流水线"
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "持续集成数据图"
@@ -89,8 +95,8 @@ msgstr "添加目录"
msgid "All"
msgstr "全部"
-msgid "Appearances"
-msgstr "外观样式"
+msgid "Appearance"
+msgstr ""
msgid "Applications"
msgstr "应用程序"
@@ -113,65 +119,92 @@ msgstr "确定要重置健康检查令牌吗?"
msgid "Are you sure?"
msgstr "确定吗?"
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "拖放文件到此处或者 %{upload_link}"
-msgid "Authentication log"
-msgstr "认证日志"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
+msgstr ""
msgid "Billing"
-msgstr "账单"
+msgstr ""
msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} 目前正在使用 %{plan_link} 方案。"
+msgstr ""
msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "当某些方案当前不可用时自动降级和升级。"
+msgstr ""
msgid "BillingPlans|Current plan"
-msgstr "当前方案"
+msgstr ""
msgid "BillingPlans|Customer Support"
-msgstr "客户支持"
+msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "通过阅读%{faq_link} 了解关于每个方案的更多信息。"
+msgstr ""
msgid "BillingPlans|Manage plan"
-msgstr "管理方案"
+msgstr ""
msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "在这种情况下,请联系 %{customer_support_link}。"
+msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
-msgstr "查看 %{plan_name} 的所有功能"
+msgstr ""
msgid "BillingPlans|This group uses the plan associated with its parent group."
-msgstr "该群组使用与它的父团队相关联的计划。"
+msgstr ""
msgid "BillingPlans|To manage the plan for this group, visit the billing section of %{parent_billing_page_link}."
-msgstr "请访问 %{parent_billing_page_link} 的计费方案部分来管理该团队的计费方案,。"
+msgstr ""
msgid "BillingPlans|Upgrade"
-msgstr "升级"
+msgstr ""
msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "你目前正在使用 %{plan_link} 方案。"
+msgstr ""
msgid "BillingPlans|frequently asked questions"
-msgstr "常见问题"
+msgstr ""
msgid "BillingPlans|monthly"
-msgstr "每月"
+msgstr ""
msgid "BillingPlans|paid annually at %{price_per_year}"
-msgstr "每年支付 %{price_per_year}"
+msgstr ""
msgid "BillingPlans|per user"
-msgstr "每个用户"
+msgstr ""
msgid "Billinglans|Downgrade"
-msgstr "降级"
+msgstr ""
+
+msgid "Board"
+msgstr ""
msgid "Branch"
msgid_plural "Branches"
@@ -189,6 +222,90 @@ msgstr "切换分支"
msgid "Branches"
msgstr "分支"
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "浏览目录"
@@ -331,9 +448,6 @@ msgstr "提交者:"
msgid "Compare"
msgstr "比较"
-msgid "Container Registry"
-msgstr "容器注册表"
-
msgid "Contribution guide"
msgstr "贡献指南"
@@ -341,7 +455,7 @@ msgid "Contributors"
msgstr "贡献者"
msgid "Copy SSH public key to clipboard"
-msgstr "将 SSH 公钥复制到剪贴板"
+msgstr ""
msgid "Copy URL to clipboard"
msgstr "复制 URL 到剪贴板"
@@ -482,6 +596,9 @@ msgstr "编辑 %{id} 流水线计划"
msgid "Emails"
msgstr "电子邮件"
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr "全部"
@@ -509,6 +626,9 @@ msgstr "每月执行(每月 1 日凌晨 4 点)"
msgid "Every week (Sundays at 4:00am)"
msgstr "每周执行(周日凌晨 4 点)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "无法变更所有者"
@@ -550,7 +670,7 @@ msgid "GPG Keys"
msgstr "GPG 密钥"
msgid "Geo Nodes"
-msgstr "Geo 节点"
+msgstr ""
msgid "Git storage health information has been reset"
msgstr "Git 存储健康信息已重置"
@@ -564,8 +684,29 @@ msgstr "跳转到派生项目"
msgid "GoToYourFork|Fork"
msgstr "跳转到派生项目"
-msgid "Group overview"
-msgstr "群组概览"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
+msgstr ""
msgid "Health Check"
msgstr "健康检查"
@@ -585,12 +726,6 @@ msgstr "没有检测到健康问题"
msgid "HealthCheck|Unhealthy"
msgstr "非健康"
-msgid "Home"
-msgstr "首页"
-
-msgid "Hooks"
-msgstr "钩子"
-
msgid "Housekeeping successfully started"
msgstr "已开始维护"
@@ -612,6 +747,9 @@ msgstr "议题事件"
msgid "Issues"
msgstr "议题"
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "停用"
@@ -653,14 +791,14 @@ msgid "Leave project"
msgstr "退出项目"
msgid "License"
-msgstr "许可"
+msgstr ""
msgid "Limited to showing %d event at most"
msgid_plural "Limited to showing %d events at most"
msgstr[0] "最多显示 %d 个事件"
msgid "Locked Files"
-msgstr "锁定的文件"
+msgstr ""
msgid "Median"
msgstr "中位数"
@@ -674,6 +812,9 @@ msgstr "合并请求"
msgid "Merge events"
msgstr "合并事件"
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr "消息"
@@ -801,6 +942,18 @@ msgstr "概览"
msgid "Owner"
msgstr "所有者"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr "密码"
@@ -817,7 +970,7 @@ msgid "Pipeline Schedules"
msgstr "流水线计划"
msgid "Pipeline quota"
-msgstr "流水线配额"
+msgstr ""
msgid "PipelineCharts|Failed:"
msgstr "失败:"
@@ -906,11 +1059,8 @@ msgstr "于阶段"
msgid "Preferences"
msgstr "偏好设置"
-msgid "Profile Settings"
-msgstr "账户设置"
-
-msgid "Project"
-msgstr "项目"
+msgid "Profile"
+msgstr ""
msgid "Project '%{project_name}' queued for deletion."
msgstr "项目 '%{project_name}' 已进入删除队列。"
@@ -942,12 +1092,6 @@ msgstr "项目导出链接已过期。请从项目设置中重新生成项目导
msgid "Project export started. A download link will be sent by email."
msgstr "项目导出已开始。下载链接将通过电子邮件发送。"
-msgid "Project home"
-msgstr "项目首页"
-
-msgid "Project overview"
-msgstr "项目概览"
-
msgid "ProjectActivityRSS|Subscribe"
msgstr "订阅"
@@ -972,25 +1116,28 @@ msgstr "阶段"
msgid "ProjectNetworkGraph|Graph"
msgstr "分支图"
-msgid "Push Rules"
-msgstr "推送规则"
+msgid "ProjectsDropdown|Frequently visited"
+msgstr ""
msgid "ProjectsDropdown|Loading projects"
+msgstr "加载项目中"
+
+msgid "ProjectsDropdown|Projects you visit often will appear here"
+msgstr "您经常访问的项目将出现在这里"
+
+msgid "ProjectsDropdown|Search your projects"
+msgstr "搜索您的项目"
+
+msgid "ProjectsDropdown|Something went wrong on our end."
msgstr ""
msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
-msgid "ProjectsDropdown|Projects you visit often will appear here"
-msgstr ""
-
-msgid "ProjectsDropdown|Search your projects"
-msgstr ""
-
-msgid "ProjectsDropdown|Something went wrong on our end"
-msgstr ""
+msgstr "对不起,没有搜索到符合条件的项目"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
+msgstr "此功能需要浏览器支持 localStorage"
+
+msgid "Push Rules"
msgstr ""
msgid "Push events"
@@ -1008,6 +1155,9 @@ msgstr "分支"
msgid "RefSwitcher|Tags"
msgstr "标签"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "相关的提交"
@@ -1062,6 +1212,9 @@ msgstr "保存流水线计划"
msgid "Schedule a new pipeline"
msgstr "新建流水线计划"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "流水线计划"
@@ -1101,6 +1254,12 @@ msgstr "设置密码"
msgid "Settings"
msgstr "设置"
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "显示 %d 个事件"
@@ -1108,6 +1267,102 @@ msgstr[0] "显示 %d 个事件"
msgid "Snippets"
msgstr "代码片段"
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "源代码"
@@ -1120,6 +1375,9 @@ msgstr "在 Runner 设置时指定以下 URL:"
msgid "StarProject|Star"
msgstr "星标"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "由此更改 %{new_merge_request}"
@@ -1129,6 +1387,9 @@ msgstr "启动 Runner!"
msgid "Switch branch/tag"
msgstr "切换分支/标签"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "标签"
@@ -1193,6 +1454,9 @@ msgstr "中位数是一个数列中最中间的值。例如在 3、5、9 之间
msgid "There are problems accessing Git storage: "
msgstr "访问 Git 存储时出现问题:"
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "在创建一个空的存储库或导入现有存储库之前,将无法推送代码。"
@@ -1366,9 +1630,15 @@ msgstr "在安装过程中使用以下注册令牌:"
msgid "Use your global notification setting"
msgstr "使用全局通知设置"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "查看待处理的合并请求"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "内部"
@@ -1441,6 +1711,12 @@ msgstr "在账号中 %{add_ssh_key_link} 之前将无法通过 SSH 拉取或推
msgid "Your name"
msgstr "您的名字"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "天"
diff --git a/locale/zh_HK/gitlab.po b/locale/zh_HK/gitlab.po
index 48b86508d1e..c3b6cc72aed 100644
--- a/locale/zh_HK/gitlab.po
+++ b/locale/zh_HK/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:21-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:44-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Chinese Traditional, Hong Kong\n"
"Language: zh_HK\n"
@@ -27,6 +27,9 @@ msgstr[0] "為提高頁面加載速度及性能,已省略了 %s 次提交。"
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "由 %{commit_author_link} 提交於 %{commit_timeago}"
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr "已失敗 %{number_of_failures} 次,最大失敗 %{maximum_failures} 次,GitLab 將重試。"
@@ -47,6 +50,9 @@ msgid "1 pipeline"
msgid_plural "%d pipelines"
msgstr[0] "%d 條流水線"
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "相關持續集成的圖像集合"
@@ -89,7 +95,7 @@ msgstr "添加新目錄"
msgid "All"
msgstr "全部"
-msgid "Appearances"
+msgid "Appearance"
msgstr ""
msgid "Applications"
@@ -113,10 +119,34 @@ msgstr "確定要重置健康檢查令牌嗎?"
msgid "Are you sure?"
msgstr "確定嗎?"
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "拖放文件到此處或者 %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -173,6 +203,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] "分支"
@@ -189,6 +222,90 @@ msgstr "切換分支"
msgid "Branches"
msgstr "分支"
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "瀏覽目錄"
@@ -331,9 +448,6 @@ msgstr "提交者:"
msgid "Compare"
msgstr "比較"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "貢獻指南"
@@ -482,6 +596,9 @@ msgstr "編輯 %{id} 流水線計劃"
msgid "Emails"
msgstr ""
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr "全部"
@@ -509,6 +626,9 @@ msgstr "每月執行(每月 1 日淩晨 4 點)"
msgid "Every week (Sundays at 4:00am)"
msgstr "每週執行(周日淩晨 4 點)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "無法變更所有者"
@@ -564,7 +684,28 @@ msgstr "跳轉到派生項目"
msgid "GoToYourFork|Fork"
msgstr "跳轉到派生項目"
-msgid "Group overview"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
msgstr ""
msgid "Health Check"
@@ -585,12 +726,6 @@ msgstr "沒有檢測到健康問題"
msgid "HealthCheck|Unhealthy"
msgstr "不良"
-msgid "Home"
-msgstr "首頁"
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "已開始維護"
@@ -612,6 +747,9 @@ msgstr "議題事件 (issue event)"
msgid "Issues"
msgstr ""
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "停用"
@@ -674,6 +812,9 @@ msgstr ""
msgid "Merge events"
msgstr "合併事件 (merge event)"
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
msgstr ""
@@ -801,6 +942,18 @@ msgstr ""
msgid "Owner"
msgstr "所有者"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr ""
@@ -906,12 +1059,9 @@ msgstr "於階段"
msgid "Preferences"
msgstr ""
-msgid "Profile Settings"
+msgid "Profile"
msgstr ""
-msgid "Project"
-msgstr "專案"
-
msgid "Project '%{project_name}' queued for deletion."
msgstr "項目 '%{project_name}' 已進入刪除隊列。"
@@ -942,12 +1092,6 @@ msgstr "項目導出鏈接已過期。請從項目設置中重新生成項目導
msgid "Project export started. A download link will be sent by email."
msgstr "項目導出已開始。下載鏈接將通過電子郵件發送。"
-msgid "Project home"
-msgstr "項目首頁"
-
-msgid "Project overview"
-msgstr ""
-
msgid "ProjectActivityRSS|Subscribe"
msgstr "訂閱"
@@ -972,27 +1116,30 @@ msgstr "階段"
msgid "ProjectNetworkGraph|Graph"
msgstr "分支圖"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "Push Rules"
+msgstr ""
+
msgid "Push events"
msgstr "推送事件 (push event) "
@@ -1008,6 +1155,9 @@ msgstr "分支"
msgid "RefSwitcher|Tags"
msgstr "標籤"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "相關的提交"
@@ -1062,6 +1212,9 @@ msgstr "保存流水線計劃"
msgid "Schedule a new pipeline"
msgstr "新建流水線計劃"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "流水線計劃"
@@ -1101,6 +1254,12 @@ msgstr "設置密碼"
msgid "Settings"
msgstr ""
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "顯示 %d 個事件"
@@ -1108,6 +1267,102 @@ msgstr[0] "顯示 %d 個事件"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "源代碼"
@@ -1120,6 +1375,9 @@ msgstr "在 Runner 設置時指定以下 URL:"
msgid "StarProject|Star"
msgstr "星標"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "由此更改 %{new_merge_request}"
@@ -1129,6 +1387,9 @@ msgstr "運作 Runner!"
msgid "Switch branch/tag"
msgstr "切換分支/標籤"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "標籤"
@@ -1193,6 +1454,9 @@ msgstr "中位數是壹個數列中最中間的值。例如在 3、5、9 之間
msgid "There are problems accessing Git storage: "
msgstr "訪問 Git 存儲時出現問題:"
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "在創建壹個空的存儲庫或導入現有存儲庫之前,您將無法推送代碼。"
@@ -1366,9 +1630,15 @@ msgstr "在安裝過程中使用以下註冊令牌:"
msgid "Use your global notification setting"
msgstr "使用全局通知設置"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "查看開啟的合並請求"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "內部"
@@ -1441,6 +1711,12 @@ msgstr "在賬號中 %{add_ssh_key_link} 之前將無法通過 SSH 拉取或推
msgid "Your name"
msgstr "您的名字"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "天"
diff --git a/locale/zh_TW/gitlab.po b/locale/zh_TW/gitlab.po
index da6a98bdb5c..8a14cd01566 100644
--- a/locale/zh_TW/gitlab.po
+++ b/locale/zh_TW/gitlab.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab-ee\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-06 08:32+0200\n"
-"PO-Revision-Date: 2017-09-15 05:21-0400\n"
+"POT-Creation-Date: 2017-09-27 16:26+0200\n"
+"PO-Revision-Date: 2017-09-27 13:44-0400\n"
"Last-Translator: gitlab \n"
"Language-Team: Chinese Traditional\n"
"Language: zh_TW\n"
@@ -27,6 +27,9 @@ msgstr[0] "因效能考量,不顯示 %s 個更動 (commit)。"
msgid "%{commit_author_link} committed %{commit_timeago}"
msgstr "%{commit_author_link} 在 %{commit_timeago} 送交"
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
msgid "%{number_of_failures} of %{maximum_failures} failures. GitLab will allow access on the next attempt."
msgstr "已失敗 %{number_of_failures} 次,在失敗 %{maximum_failures} 次前 GitLab 會重試。"
@@ -47,6 +50,9 @@ msgid "1 pipeline"
msgid_plural "%d pipelines"
msgstr[0] "%d 條流水線"
+msgid "1st contribution!"
+msgstr ""
+
msgid "A collection of graphs regarding Continuous Integration"
msgstr "持續整合 (CI) 相關的圖表"
@@ -63,7 +69,7 @@ msgid "Access to failing storages has been temporarily disabled to allow the mou
msgstr "已暫時停用失敗的 Git 儲存空間。當儲存空間恢復正常後,請重置儲存空間健康指數。"
msgid "Account"
-msgstr ""
+msgstr "帳號"
msgid "Active"
msgstr "啟用"
@@ -89,8 +95,8 @@ msgstr "新增目錄"
msgid "All"
msgstr "全部"
-msgid "Appearances"
-msgstr "外觀"
+msgid "Appearance"
+msgstr ""
msgid "Applications"
msgstr "應用程式"
@@ -113,10 +119,34 @@ msgstr "確定要重置健康檢查存取憑證 (access token) 嗎?"
msgid "Are you sure?"
msgstr "確定嗎?"
+msgid "Artifacts"
+msgstr ""
+
msgid "Attach a file by drag & drop or %{upload_link}"
msgstr "拖放檔案到此處或者 %{upload_link}"
-msgid "Authentication log"
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Auto DevOps (Beta)"
+msgstr ""
+
+msgid "Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "Auto DevOps documentation"
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name and the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need a domain name to work correctly."
+msgstr ""
+
+msgid "Auto Review Apps and Auto Deploy need the %{kubernetes} to work correctly."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the"
msgstr ""
msgid "Billing"
@@ -173,6 +203,9 @@ msgstr ""
msgid "Billinglans|Downgrade"
msgstr ""
+msgid "Board"
+msgstr ""
+
msgid "Branch"
msgid_plural "Branches"
msgstr[0] "分支 (branch) "
@@ -189,6 +222,90 @@ msgstr "切換分支 (branch)"
msgid "Branches"
msgstr "分支 (branch) "
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project master or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
msgid "Browse Directory"
msgstr "瀏覽目錄"
@@ -331,9 +448,6 @@ msgstr "送交者為 "
msgid "Compare"
msgstr "比較"
-msgid "Container Registry"
-msgstr ""
-
msgid "Contribution guide"
msgstr "協作指南"
@@ -429,7 +543,7 @@ msgid_plural "Deploys"
msgstr[0] "部署"
msgid "Deploy Keys"
-msgstr ""
+msgstr "部署金鑰"
msgid "Description"
msgstr "描述"
@@ -482,6 +596,9 @@ msgstr "編輯 %{id} 流水線 (pipeline) 排程"
msgid "Emails"
msgstr "電子郵件"
+msgid "Enable in settings"
+msgstr ""
+
msgid "EventFilterBy|Filter by all"
msgstr "顯示全部"
@@ -509,6 +626,9 @@ msgstr "每月執行(每月一日淩晨四點)"
msgid "Every week (Sundays at 4:00am)"
msgstr "每週執行(週日淩晨 四點)"
+msgid "Explore projects"
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "無法變更所有權"
@@ -547,7 +667,7 @@ msgid "From merge request merge until deploy to production"
msgstr "從請求被合併後 (merge request merged) 直到部署至營運環境"
msgid "GPG Keys"
-msgstr ""
+msgstr "GPG 金鑰"
msgid "Geo Nodes"
msgstr ""
@@ -564,8 +684,29 @@ msgstr "前往您的分支 (fork) "
msgid "GoToYourFork|Fork"
msgstr "前往您的分支 (fork) "
-msgid "Group overview"
-msgstr "群組總覽"
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Share with group lock"
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
+msgstr ""
msgid "Health Check"
msgstr "健康檢查"
@@ -585,12 +726,6 @@ msgstr "沒有檢測到健康問題"
msgid "HealthCheck|Unhealthy"
msgstr "不良"
-msgid "Home"
-msgstr "首頁"
-
-msgid "Hooks"
-msgstr ""
-
msgid "Housekeeping successfully started"
msgstr "已開始維護"
@@ -612,6 +747,9 @@ msgstr "議題 (issue) 事件"
msgid "Issues"
msgstr "議題"
+msgid "Jobs"
+msgstr ""
+
msgid "LFSStatus|Disabled"
msgstr "停用"
@@ -669,13 +807,16 @@ msgid "Members"
msgstr "成員"
msgid "Merge Requests"
-msgstr ""
+msgstr "合併請求 (merge request)"
msgid "Merge events"
msgstr "合併 (merge) 事件"
+msgid "Merge request"
+msgstr ""
+
msgid "Messages"
-msgstr "訊息"
+msgstr "公告"
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "新增 SSH 金鑰"
@@ -801,6 +942,18 @@ msgstr "總覽"
msgid "Owner"
msgstr "所有權"
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next"
+msgstr ""
+
+msgid "Pagination|Prev"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
msgid "Password"
msgstr "密碼"
@@ -904,14 +1057,11 @@ msgid "Pipeline|with stages"
msgstr "於階段"
msgid "Preferences"
-msgstr ""
+msgstr "偏好設定"
-msgid "Profile Settings"
+msgid "Profile"
msgstr ""
-msgid "Project"
-msgstr "專案"
-
msgid "Project '%{project_name}' queued for deletion."
msgstr "專案 '%{project_name}' 已加入刪除佇列。"
@@ -942,12 +1092,6 @@ msgstr "專案的匯出連結已失效。請到專案設定中產生新的連結
msgid "Project export started. A download link will be sent by email."
msgstr "專案導出已開始。完成後下載連結會送到您的信箱。"
-msgid "Project home"
-msgstr "專案首頁"
-
-msgid "Project overview"
-msgstr "專案總覽"
-
msgid "ProjectActivityRSS|Subscribe"
msgstr "訂閱"
@@ -972,25 +1116,28 @@ msgstr "階段"
msgid "ProjectNetworkGraph|Graph"
msgstr "分支圖"
-msgid "Push Rules"
+msgid "ProjectsDropdown|Frequently visited"
msgstr ""
msgid "ProjectsDropdown|Loading projects"
msgstr ""
-msgid "ProjectsDropdown|Sorry, no projects matched your search"
-msgstr ""
-
msgid "ProjectsDropdown|Projects you visit often will appear here"
msgstr ""
msgid "ProjectsDropdown|Search your projects"
+msgstr "搜尋您的專案"
+
+msgid "ProjectsDropdown|Something went wrong on our end."
msgstr ""
-msgid "ProjectsDropdown|Something went wrong on our end"
-msgstr ""
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
+msgstr "抱歉,沒有符合搜尋條件的專案"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
+msgstr "此功能需要瀏覽器支援 localStorage"
+
+msgid "Push Rules"
msgstr ""
msgid "Push events"
@@ -1008,6 +1155,9 @@ msgstr "分支 (branch) "
msgid "RefSwitcher|Tags"
msgstr "標籤"
+msgid "Registry"
+msgstr ""
+
msgid "Related Commits"
msgstr "相關的更動記錄 (commit) "
@@ -1054,7 +1204,7 @@ msgid "Revert this merge request"
msgstr "還原此合併請求 (merge request) "
msgid "SSH Keys"
-msgstr ""
+msgstr "SSH 金鑰"
msgid "Save pipeline schedule"
msgstr "儲存流水線 (pipeline) 排程"
@@ -1062,6 +1212,9 @@ msgstr "儲存流水線 (pipeline) 排程"
msgid "Schedule a new pipeline"
msgstr "建立流水線 (pipeline) 排程"
+msgid "Schedules"
+msgstr ""
+
msgid "Scheduling Pipelines"
msgstr "流水線 (pipeline) 排程"
@@ -1101,6 +1254,12 @@ msgstr "設定密碼"
msgid "Settings"
msgstr "設定"
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "顯示 %d 個事件"
@@ -1108,6 +1267,102 @@ msgstr[0] "顯示 %d 個事件"
msgid "Snippets"
msgstr ""
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Milestone"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
msgid "Source code"
msgstr "原始碼"
@@ -1120,6 +1375,9 @@ msgstr "在安裝 Runner 時指定以下 URL:"
msgid "StarProject|Star"
msgstr "收藏"
+msgid "Starred projects"
+msgstr ""
+
msgid "Start a %{new_merge_request} with these changes"
msgstr "以這些改動建立一個新的 %{new_merge_request} "
@@ -1129,6 +1387,9 @@ msgstr "啟動 Runner!"
msgid "Switch branch/tag"
msgstr "切換分支 (branch) 或標籤"
+msgid "System Hooks"
+msgstr ""
+
msgid "Tag"
msgid_plural "Tags"
msgstr[0] "標籤"
@@ -1193,6 +1454,9 @@ msgstr "中位數是一個數列中最中間的值。例如在 3、5、9 之間
msgid "There are problems accessing Git storage: "
msgstr "存取 Git 儲存空間時出現問題:"
+msgid "This is the author's first Merge Request to this project. Handle with care."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "這代表在您建立一個空的檔案庫 (repository) 或是匯入一個現存的檔案庫之前,您將無法上傳更新 (push) 。"
@@ -1366,9 +1630,15 @@ msgstr "在安裝過程中使用此註冊憑證 (registration token):"
msgid "Use your global notification setting"
msgstr "使用全域通知設定"
+msgid "View file @ "
+msgstr ""
+
msgid "View open merge request"
msgstr "查看此分支的合併請求 (merge request)"
+msgid "View replaced file @ "
+msgstr ""
+
msgid "VisibilityLevel|Internal"
msgstr "內部"
@@ -1388,7 +1658,7 @@ msgid "We don't have enough data to show this stage."
msgstr "因該階段的資料不足而無法顯示相關資訊"
msgid "Wiki"
-msgstr ""
+msgstr "Wiki"
msgid "Withdraw Access Request"
msgstr "取消權限申請"
@@ -1441,6 +1711,12 @@ msgstr "在個人帳號中 %{add_ssh_key_link} 之前, 將無法使用 SSH 上
msgid "Your name"
msgstr "您的名字"
+msgid "Your projects"
+msgstr ""
+
+msgid "commit"
+msgstr ""
+
msgid "day"
msgid_plural "days"
msgstr[0] "天"
From feae8b2e44ee66c572efeab2575234de292ac01e Mon Sep 17 00:00:00 2001
From: "Luke \"Jared\" Bennett"
Date: Sun, 1 Oct 2017 16:14:12 +0100
Subject: [PATCH 250/263] use LazyImageTagHelper.placeholder_image for blank
src base64 image
---
spec/views/shared/issuable/_participants.html.haml.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/spec/views/shared/issuable/_participants.html.haml.rb b/spec/views/shared/issuable/_participants.html.haml.rb
index 0a123e83e2e..51059d4c0d7 100644
--- a/spec/views/shared/issuable/_participants.html.haml.rb
+++ b/spec/views/shared/issuable/_participants.html.haml.rb
@@ -19,7 +19,7 @@ describe 'shared/issuable/_participants.html.haml' do
avatars.each do |avatar|
expect(avatar[:class]).to include('lazy')
- expect(avatar[:src]).to eql('data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==')
+ expect(avatar[:src]).to eql(LazyImageTagHelper.placeholder_image)
expect(avatar[:"data-src"]).to match('http://www.gravatar.com/avatar/')
end
end
From 1e9f9d97e1754fb99b9317847a06cfd5a3755fe7 Mon Sep 17 00:00:00 2001
From: Joshua Lambert
Date: Sun, 1 Oct 2017 22:04:18 -0400
Subject: [PATCH 251/263] minor cleanup
---
doc/install/kubernetes/index.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/install/kubernetes/index.md b/doc/install/kubernetes/index.md
index 90b9e98455a..aed00ae9e2c 100644
--- a/doc/install/kubernetes/index.md
+++ b/doc/install/kubernetes/index.md
@@ -10,11 +10,11 @@ should be deployed, upgraded, and configured.
## Chart Overview
* **[GitLab-Omnibus](gitlab_omnibus.md)**: The best way to run GitLab on Kubernetes today. It is suited for small to medium deployments, and is in beta while support for backups and other features are added.
-* **[Cloud Native GitLab Chart](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md)**: The next generation of charts, currently in development. Will support large deployments, with horizontal scaling of individual GitLab components.
+* **[Cloud Native GitLab Chart](https://gitlab.com/charts/helm.gitlab.io/blob/master/README.md)**: The next generation GitLab chart, currently in development. Will support large deployments with horizontal scaling of individual GitLab components.
* Other Charts
* [GitLab Runner Chart](gitlab_runner_chart.md): For deploying just the GitLab Runner.
* [Advanced GitLab Installation](gitlab_chart.md): Provides additional deployment options, but provides less functionality out-of-the-box. It's beta, no longer actively developed, and will be deprecated by [gitlab-omnibus](#gitlab-omnibus-chart-recommended) once it supports these options.
- * [Community Contributed Charts](#community-contributed-charts): Community contributed charts, deprecated by the official GitLab charts.
+ * [Community Contributed Charts](#community-contributed-charts): Community contributed charts, deprecated by the official GitLab chart.
## GitLab-Omnibus Chart (Recommended)
> **Note**: This chart is in beta while [additional features](https://gitlab.com/charts/charts.gitlab.io/issues/68) are being added.
From 6188e449dee43a18b9cec1a7bb5a2cd7aa17b6f7 Mon Sep 17 00:00:00 2001
From: Stan Hu
Date: Sun, 1 Oct 2017 19:45:44 -0700
Subject: [PATCH 252/263] Fix pushes to an empty repository not invalidating
has_visible_content? cache
`Repository#has_visible_content?` used to rely on the cached count of local branches, but
since it is now an independently cached value it needs to be invalidated on its own.
Closes #38646
---
app/models/repository.rb | 9 ++++++---
changelogs/unreleased/sh-fix-issue-38646.yml | 5 +++++
spec/models/repository_spec.rb | 13 ++++++++++++-
3 files changed, 23 insertions(+), 4 deletions(-)
create mode 100644 changelogs/unreleased/sh-fix-issue-38646.yml
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 1f4df50a913..a0f57f1e54d 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -34,7 +34,10 @@ class Repository
CACHED_METHODS = %i(size commit_count rendered_readme contribution_guide
changelog license_blob license_key gitignore koding_yml
gitlab_ci_yml branch_names tag_names branch_count
- tag_count avatar exists? empty? root_ref).freeze
+ tag_count avatar exists? empty? root_ref has_visible_content?).freeze
+
+ # Methods that use cache_method but only memoize the value
+ MEMOIZED_CACHED_METHODS = %i(license empty_repo?).freeze
# Certain method caches should be refreshed when certain types of files are
# changed. This Hash maps file types (as returned by Gitlab::FileDetector) to
@@ -269,7 +272,7 @@ class Repository
end
def expire_branches_cache
- expire_method_caches(%i(branch_names branch_count))
+ expire_method_caches(%i(branch_names branch_count has_visible_content?))
@local_branches = nil
@branch_exists_memo = nil
end
@@ -340,7 +343,7 @@ class Repository
def expire_emptiness_caches
return unless empty?
- expire_method_caches(%i(empty?))
+ expire_method_caches(%i(empty? has_visible_content?))
end
def lookup_cache
diff --git a/changelogs/unreleased/sh-fix-issue-38646.yml b/changelogs/unreleased/sh-fix-issue-38646.yml
new file mode 100644
index 00000000000..5c205775662
--- /dev/null
+++ b/changelogs/unreleased/sh-fix-issue-38646.yml
@@ -0,0 +1,5 @@
+---
+title: Fix pushes to an empty repository not invalidating has_visible_content? cache
+merge_request:
+author:
+type: fixed
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index ab81d39691b..3b8ae4d3fd1 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -1272,6 +1272,7 @@ describe Repository do
allow(repository).to receive(:empty?).and_return(true)
expect(cache).to receive(:expire).with(:empty?)
+ expect(cache).to receive(:expire).with(:has_visible_content?)
repository.expire_emptiness_caches
end
@@ -1280,6 +1281,7 @@ describe Repository do
allow(repository).to receive(:empty?).and_return(false)
expect(cache).not_to receive(:expire).with(:empty?)
+ expect(cache).not_to receive(:expire).with(:has_visible_content?)
repository.expire_emptiness_caches
end
@@ -1609,7 +1611,7 @@ describe Repository do
describe '#expire_branches_cache' do
it 'expires the cache' do
expect(repository).to receive(:expire_method_caches)
- .with(%i(branch_names branch_count))
+ .with(%i(branch_names branch_count has_visible_content?))
.and_call_original
repository.expire_branches_cache
@@ -1888,6 +1890,15 @@ describe Repository do
repository.expire_all_method_caches
end
+
+ it 'all cache_method definitions are in the lists of method caches' do
+ methods = repository.methods.map do |method|
+ match = /^_uncached_(.*)/.match(method)
+ match[1].to_sym if match
+ end.compact
+
+ expect(methods).to match_array(Repository::CACHED_METHODS + Repository::MEMOIZED_CACHED_METHODS)
+ end
end
describe '#file_on_head' do
From 5a451215c826efeaba1328bfd406c9f5179f6885 Mon Sep 17 00:00:00 2001
From: Filipa Lacerda
Date: Mon, 2 Oct 2017 09:32:46 +0100
Subject: [PATCH 253/263] Removes auto devops callout from repo editor view
---
app/views/projects/tree/show.html.haml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/views/projects/tree/show.html.haml b/app/views/projects/tree/show.html.haml
index f819f2addaa..0cc6674842a 100644
--- a/app/views/projects/tree/show.html.haml
+++ b/app/views/projects/tree/show.html.haml
@@ -12,7 +12,7 @@
= webpack_bundle_tag 'repo'
%div{ class: [container_class, ("limit-container-width" unless fluid_layout)] }
- - if show_auto_devops_callout?(@project)
+ - if show_auto_devops_callout?(@project) && !show_new_repo?
= render 'shared/auto_devops_callout'
= render 'projects/last_push'
= render 'projects/files', commit: @last_commit, project: @project, ref: @ref, content_url: project_tree_path(@project, @id)
From b4d6bbf4507a2c4aa09a1f9d11823a8b94fb4a62 Mon Sep 17 00:00:00 2001
From: Filipa Lacerda
Date: Mon, 2 Oct 2017 09:01:55 +0000
Subject: [PATCH 254/263] Remove global components
---
.../components/stage_code_component.vue | 4 +++
.../components/stage_component.vue | 4 +++
.../components/stage_plan_component.vue | 34 +++++++++++--------
.../components/stage_review_component.vue | 4 +++
.../components/stage_staging_component.vue | 4 +++
.../components/stage_test_component.vue | 34 +++++++++++--------
.../cycle_analytics/cycle_analytics_bundle.js | 6 ----
7 files changed, 55 insertions(+), 35 deletions(-)
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue
index e4d62b649e5..45930145b0a 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue
@@ -1,5 +1,7 @@
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_component.vue
index ab730af8f5b..8c98bd249a1 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_component.vue
@@ -1,5 +1,7 @@
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_plan_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_plan_component.vue
index 152c086a606..75d2f1fd70c 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_plan_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_plan_component.vue
@@ -1,21 +1,25 @@
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue
index 9e66b690404..f54ea7df522 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue
@@ -1,5 +1,7 @@
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue
index 2787b5ea47b..5d95ddcd90e 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue
@@ -1,6 +1,8 @@
diff --git a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js
index 8002b0b23c9..991fcf114da 100644
--- a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js
+++ b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js
@@ -3,14 +3,12 @@
import Vue from 'vue';
import Cookies from 'js-cookie';
import Translate from '../vue_shared/translate';
-import limitWarningComponent from './components/limit_warning_component.vue';
import stageCodeComponent from './components/stage_code_component.vue';
import stagePlanComponent from './components/stage_plan_component.vue';
import stageComponent from './components/stage_component.vue';
import stageReviewComponent from './components/stage_review_component.vue';
import stageStagingComponent from './components/stage_staging_component.vue';
import stageTestComponent from './components/stage_test_component.vue';
-import totalTime from './components/total_time_component.vue';
import CycleAnalyticsService from './cycle_analytics_service';
import CycleAnalyticsStore from './cycle_analytics_store';
@@ -133,8 +131,4 @@ $(() => {
},
},
});
-
- // Register global components
- Vue.component('limit-warning', limitWarningComponent);
- Vue.component('total-time', totalTime);
});
From b4d25a8583e48605a7da49c0dcb2ca75c71f6692 Mon Sep 17 00:00:00 2001
From: Achilleas Pipinellis
Date: Mon, 2 Oct 2017 11:11:48 +0200
Subject: [PATCH 255/263] Add changelog lint script to docs lint CI job
---
.gitlab-ci.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ed993abae73..8501911fde4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -404,6 +404,7 @@ docs lint:
before_script: []
script:
- scripts/lint-doc.sh
+ - scripts/lint-changelog-yaml
- mv doc/ /nanoc/content/
- cd /nanoc
# Build HTML from Markdown
From 972c5e89005a1b843c7925c4f9d44a9049fdaccb Mon Sep 17 00:00:00 2001
From: Jacob Vosmaer
Date: Mon, 2 Oct 2017 11:37:26 +0200
Subject: [PATCH 256/263] Fix 'gitlay' typo in spec
---
spec/lib/gitlab/shell_spec.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/spec/lib/gitlab/shell_spec.rb b/spec/lib/gitlab/shell_spec.rb
index be11647415e..9efdd7940ca 100644
--- a/spec/lib/gitlab/shell_spec.rb
+++ b/spec/lib/gitlab/shell_spec.rb
@@ -156,7 +156,7 @@ describe Gitlab::Shell do
end
end
- context 'with gitlay' do
+ context 'with gitaly' do
it_behaves_like '#add_repository'
end
From 3197f415c8f51145209ad72eea7871c0e1acbfea Mon Sep 17 00:00:00 2001
From: Mark Fletcher
Date: Mon, 2 Oct 2017 16:42:35 +0700
Subject: [PATCH 257/263] Fix comment deletion confirmation dialog typo
---
app/assets/javascripts/notes/components/issue_note.vue | 2 +-
.../unreleased/38619-fix-comment-delete-confirm-text.yml | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
create mode 100644 changelogs/unreleased/38619-fix-comment-delete-confirm-text.yml
diff --git a/app/assets/javascripts/notes/components/issue_note.vue b/app/assets/javascripts/notes/components/issue_note.vue
index 3483f6c7538..1f43b8a16ad 100644
--- a/app/assets/javascripts/notes/components/issue_note.vue
+++ b/app/assets/javascripts/notes/components/issue_note.vue
@@ -62,7 +62,7 @@
},
deleteHandler() {
// eslint-disable-next-line no-alert
- if (confirm('Are you sure you want to delete this list?')) {
+ if (confirm('Are you sure you want to delete this comment?')) {
this.isDeleting = true;
this.deleteNote(this.note)
diff --git a/changelogs/unreleased/38619-fix-comment-delete-confirm-text.yml b/changelogs/unreleased/38619-fix-comment-delete-confirm-text.yml
new file mode 100644
index 00000000000..a203bff8410
--- /dev/null
+++ b/changelogs/unreleased/38619-fix-comment-delete-confirm-text.yml
@@ -0,0 +1,5 @@
+---
+title: Fix comment deletion confirmation dialog typo
+merge_request:
+author:
+type: fixed
From 35d673f3dc159c483e5b6a2266d10d7fccc28a65 Mon Sep 17 00:00:00 2001
From: Jacob Vosmaer
Date: Mon, 2 Oct 2017 12:12:10 +0200
Subject: [PATCH 258/263] Use Gitaly 0.43.0
---
GITALY_SERVER_VERSION | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index 787ffc30a81..8298bb08b2d 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-0.42.0
+0.43.0
From 011c168bff7174ce4b2defe239aa8d5031aa8269 Mon Sep 17 00:00:00 2001
From: Tiago Botelho
Date: Mon, 25 Sep 2017 18:07:45 +0100
Subject: [PATCH 259/263] Refactors SAML identity creation in gl_user.
---
app/models/user.rb | 6 +-
lib/gitlab/ldap/adapter.rb | 18 ++---
lib/gitlab/ldap/person.rb | 4 +-
lib/gitlab/ldap/user.rb | 26 +-------
lib/gitlab/o_auth/user.rb | 71 +++++++++++---------
lib/gitlab/saml/user.rb | 41 +++---------
spec/lib/gitlab/o_auth/user_spec.rb | 17 ++---
spec/lib/gitlab/saml/user_spec.rb | 100 ++++++++++++++--------------
8 files changed, 122 insertions(+), 161 deletions(-)
diff --git a/app/models/user.rb b/app/models/user.rb
index 09c9b3250eb..fc81a4fc27d 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -690,7 +690,11 @@ class User < ActiveRecord::Base
end
def ldap_user?
- identities.exists?(["provider LIKE ? AND extern_uid IS NOT NULL", "ldap%"])
+ if identities.loaded?
+ identities.find { |identity| identity.provider.start_with?('ldap') && !identity.extern_uid.nil? }
+ else
+ identities.exists?(["provider LIKE ? AND extern_uid IS NOT NULL", "ldap%"])
+ end
end
def ldap_identity
diff --git a/lib/gitlab/ldap/adapter.rb b/lib/gitlab/ldap/adapter.rb
index 8bbd4af58e0..0afaa2306b5 100644
--- a/lib/gitlab/ldap/adapter.rb
+++ b/lib/gitlab/ldap/adapter.rb
@@ -22,8 +22,8 @@ module Gitlab
Gitlab::LDAP::Config.new(provider)
end
- def users(field, value, limit = nil)
- options = user_options(field, value, limit)
+ def users(fields, value, limit = nil)
+ options = user_options(Array(fields), value, limit)
entries = ldap_search(options).select do |entry|
entry.respond_to? config.uid
@@ -72,8 +72,7 @@ module Gitlab
private
- def user_options(field, value, limit)
- filter = nil
+ def user_options(fields, value, limit)
options = {
attributes: Gitlab::LDAP::Person.ldap_attributes(config).compact.uniq,
base: config.base
@@ -81,16 +80,13 @@ module Gitlab
options[:size] = limit if limit
- case field.to_sym
- when :dn
+ if fields.include?('dn')
+ raise ArgumentError, 'It is not currently possible to search the DN and other fields at the same time.' if fields.size > 1
+
options[:base] = value
options[:scope] = Net::LDAP::SearchScope_BaseObject
- when :email
- filter = config.attributes['email'].map do |field|
- Net::LDAP::Filter.eq(field, value)
- end.inject(:|)
else
- filter = Net::LDAP::Filter.eq(field, value)
+ filter = fields.map { |field| Net::LDAP::Filter.eq(field, value) }.inject(:|)
end
options.merge(filter: user_filter(filter))
diff --git a/lib/gitlab/ldap/person.rb b/lib/gitlab/ldap/person.rb
index 7631d9e8b17..9a6f7827b16 100644
--- a/lib/gitlab/ldap/person.rb
+++ b/lib/gitlab/ldap/person.rb
@@ -18,7 +18,9 @@ module Gitlab
end
def self.find_by_email(email, adapter)
- adapter.user('email', email)
+ email_fields = adapter.config.attributes['email']
+
+ adapter.user(email_fields, email)
end
def self.disabled_via_active_directory?(dn, adapter)
diff --git a/lib/gitlab/ldap/user.rb b/lib/gitlab/ldap/user.rb
index 3bf27b37ae6..1793097363e 100644
--- a/lib/gitlab/ldap/user.rb
+++ b/lib/gitlab/ldap/user.rb
@@ -17,41 +17,19 @@ module Gitlab
end
end
- def initialize(auth_hash)
- super
- update_user_attributes
- end
-
def save
super('LDAP')
end
# instance methods
- def gl_user
- @gl_user ||= find_by_uid_and_provider || find_by_email || build_new_user
+ def find_user
+ find_by_uid_and_provider || find_by_email || build_new_user
end
def find_by_uid_and_provider
self.class.find_by_uid_and_provider(auth_hash.uid, auth_hash.provider)
end
- def find_by_email
- ::User.find_by(email: auth_hash.email.downcase) if auth_hash.has_attribute?(:email)
- end
-
- def update_user_attributes
- if persisted?
- # find_or_initialize_by doesn't update `gl_user.identities`, and isn't autosaved.
- identity = gl_user.identities.find { |identity| identity.provider == auth_hash.provider }
- identity ||= gl_user.identities.build(provider: auth_hash.provider)
-
- # For a new identity set extern_uid to the LDAP DN
- # For an existing identity with matching email but changed DN, update the DN.
- # For an existing identity with no change in DN, this line changes nothing.
- identity.extern_uid = auth_hash.uid
- end
- end
-
def changed?
gl_user.changed? || gl_user.identities.any?(&:changed?)
end
diff --git a/lib/gitlab/o_auth/user.rb b/lib/gitlab/o_auth/user.rb
index dd318b4242c..197dd3f97aa 100644
--- a/lib/gitlab/o_auth/user.rb
+++ b/lib/gitlab/o_auth/user.rb
@@ -13,6 +13,7 @@ module Gitlab
def initialize(auth_hash)
self.auth_hash = auth_hash
update_profile if sync_profile_from_provider?
+ add_or_update_user_identities
end
def persisted?
@@ -44,47 +45,54 @@ module Gitlab
end
def gl_user
- @user ||= find_by_uid_and_provider
+ return @gl_user if defined?(@gl_user)
- if auto_link_ldap_user?
- @user ||= find_or_create_ldap_user
- end
+ @gl_user = find_user
+ end
- if signup_enabled?
- @user ||= build_new_user
- end
+ def find_user
+ user = find_by_uid_and_provider
- if external_provider? && @user
- @user.external = true
- end
+ user ||= find_or_build_ldap_user if auto_link_ldap_user?
+ user ||= build_new_user if signup_enabled?
- @user
+ user.external = true if external_provider? && user
+
+ user
end
protected
- def find_or_create_ldap_user
+ def add_or_update_user_identities
+ # find_or_initialize_by doesn't update `gl_user.identities`, and isn't autosaved.
+ identity = gl_user.identities.find { |identity| identity.provider == auth_hash.provider }
+
+ identity ||= gl_user.identities.build(provider: auth_hash.provider)
+ identity.extern_uid = auth_hash.uid
+
+ if auto_link_ldap_user? && !gl_user.ldap_user? && ldap_person
+ log.info "Correct LDAP account has been found. identity to user: #{gl_user.username}."
+ gl_user.identities.build(provider: ldap_person.provider, extern_uid: ldap_person.dn)
+ end
+ end
+
+ def find_or_build_ldap_user
return unless ldap_person
- # If a corresponding person exists with same uid in a LDAP server,
- # check if the user already has a GitLab account.
user = Gitlab::LDAP::User.find_by_uid_and_provider(ldap_person.dn, ldap_person.provider)
if user
- # Case when a LDAP user already exists in Gitlab. Add the OAuth identity to existing account.
log.info "LDAP account found for user #{user.username}. Building new #{auth_hash.provider} identity."
- user.identities.find_or_initialize_by(extern_uid: auth_hash.uid, provider: auth_hash.provider)
- else
- log.info "No existing LDAP account was found in GitLab. Checking for #{auth_hash.provider} account."
- user = find_by_uid_and_provider
- if user.nil?
- log.info "No user found using #{auth_hash.provider} provider. Creating a new one."
- user = build_new_user
- end
- log.info "Correct account has been found. Adding LDAP identity to user: #{user.username}."
- user.identities.new(provider: ldap_person.provider, extern_uid: ldap_person.dn)
+ return user
end
- user
+ log.info "No user found using #{auth_hash.provider} provider. Creating a new one."
+ build_new_user
+ end
+
+ def find_by_email
+ return unless auth_hash.has_attribute?(:email)
+
+ ::User.find_by(email: auth_hash.email.downcase)
end
def auto_link_ldap_user?
@@ -108,12 +116,9 @@ module Gitlab
end
def find_ldap_person(auth_hash, adapter)
- person = Gitlab::LDAP::Person.find_by_uid(auth_hash.uid, adapter)
- # The `uid` might actually be a DN. Try it next.
- person ||= Gitlab::LDAP::Person.find_by_dn(auth_hash.uid, adapter)
-
- # The `uid` might actually be a Email. Try it next.
- person || Gitlab::LDAP::Person.find_by_email(auth_hash.uid, adapter)
+ Gitlab::LDAP::Person.find_by_uid(auth_hash.uid, adapter) ||
+ Gitlab::LDAP::Person.find_by_email(auth_hash.uid, adapter) ||
+ Gitlab::LDAP::Person.find_by_dn(auth_hash.uid, adapter)
end
def ldap_config
@@ -155,7 +160,7 @@ module Gitlab
end
def build_new_user
- user_params = user_attributes.merge(extern_uid: auth_hash.uid, provider: auth_hash.provider, skip_confirmation: true)
+ user_params = user_attributes.merge(skip_confirmation: true)
Users::BuildService.new(nil, user_params).execute(skip_authorization: true)
end
diff --git a/lib/gitlab/saml/user.rb b/lib/gitlab/saml/user.rb
index 2af54f8bb25..e0a9d1dee77 100644
--- a/lib/gitlab/saml/user.rb
+++ b/lib/gitlab/saml/user.rb
@@ -10,45 +10,20 @@ module Gitlab
super('SAML')
end
- def gl_user
- if auto_link_saml_user?
- @user ||= find_by_email
- end
+ def find_user
+ user = find_by_uid_and_provider
- if auto_link_ldap_user? && !@user&.ldap_user?
- @user ||= find_or_create_ldap_user
- end
+ user ||= find_by_email if auto_link_saml_user?
+ user ||= find_or_build_ldap_user if auto_link_ldap_user?
+ user ||= build_new_user if signup_enabled?
- @user ||= find_by_uid_and_provider
-
- if signup_enabled?
- @user ||= build_new_user
- end
-
- if external_users_enabled? && @user
+ if external_users_enabled? && user
# Check if there is overlap between the user's groups and the external groups
# setting then set user as external or internal.
- @user.external =
- if (auth_hash.groups & Gitlab::Saml::Config.external_groups).empty?
- false
- else
- true
- end
+ user.external = !(auth_hash.groups & Gitlab::Saml::Config.external_groups).empty?
end
- @user
- end
-
- def find_by_email
- if auth_hash.has_attribute?(:email)
- user = ::User.find_by(email: auth_hash.email.downcase)
-
- if user&.identities&.empty?
- user.identities.new(extern_uid: auth_hash.uid, provider: auth_hash.provider)
- end
-
- user
- end
+ user
end
def changed?
diff --git a/spec/lib/gitlab/o_auth/user_spec.rb b/spec/lib/gitlab/o_auth/user_spec.rb
index 8aaf320cbf5..db26e16e3b2 100644
--- a/spec/lib/gitlab/o_auth/user_spec.rb
+++ b/spec/lib/gitlab/o_auth/user_spec.rb
@@ -4,6 +4,7 @@ describe Gitlab::OAuth::User do
let(:oauth_user) { described_class.new(auth_hash) }
let(:gl_user) { oauth_user.gl_user }
let(:uid) { 'my-uid' }
+ let(:dn) { 'uid=user1,ou=People,dc=example' }
let(:provider) { 'my-provider' }
let(:auth_hash) { OmniAuth::AuthHash.new(uid: uid, provider: provider, info: info_hash) }
let(:info_hash) do
@@ -197,7 +198,7 @@ describe Gitlab::OAuth::User do
allow(ldap_user).to receive(:uid) { uid }
allow(ldap_user).to receive(:username) { uid }
allow(ldap_user).to receive(:email) { ['johndoe@example.com', 'john2@example.com'] }
- allow(ldap_user).to receive(:dn) { 'uid=user1,ou=People,dc=example' }
+ allow(ldap_user).to receive(:dn) { dn }
end
context "and no account for the LDAP user" do
@@ -213,7 +214,7 @@ describe Gitlab::OAuth::User do
identities_as_hash = gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
expect(identities_as_hash).to match_array(
[
- { provider: 'ldapmain', extern_uid: 'uid=user1,ou=People,dc=example' },
+ { provider: 'ldapmain', extern_uid: dn },
{ provider: 'twitter', extern_uid: uid }
]
)
@@ -221,7 +222,7 @@ describe Gitlab::OAuth::User do
end
context "and LDAP user has an account already" do
- let!(:existing_user) { create(:omniauth_user, email: 'john@example.com', extern_uid: 'uid=user1,ou=People,dc=example', provider: 'ldapmain', username: 'john') }
+ let!(:existing_user) { create(:omniauth_user, email: 'john@example.com', extern_uid: dn, provider: 'ldapmain', username: 'john') }
it "adds the omniauth identity to the LDAP account" do
allow(Gitlab::LDAP::Person).to receive(:find_by_uid).and_return(ldap_user)
@@ -234,7 +235,7 @@ describe Gitlab::OAuth::User do
identities_as_hash = gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
expect(identities_as_hash).to match_array(
[
- { provider: 'ldapmain', extern_uid: 'uid=user1,ou=People,dc=example' },
+ { provider: 'ldapmain', extern_uid: dn },
{ provider: 'twitter', extern_uid: uid }
]
)
@@ -252,7 +253,7 @@ describe Gitlab::OAuth::User do
expect(identities_as_hash)
.to match_array(
[
- { provider: 'ldapmain', extern_uid: 'uid=user1,ou=People,dc=example' },
+ { provider: 'ldapmain', extern_uid: dn },
{ provider: 'twitter', extern_uid: uid }
]
)
@@ -310,8 +311,8 @@ describe Gitlab::OAuth::User do
allow(ldap_user).to receive(:uid) { uid }
allow(ldap_user).to receive(:username) { uid }
allow(ldap_user).to receive(:email) { ['johndoe@example.com', 'john2@example.com'] }
- allow(ldap_user).to receive(:dn) { 'uid=user1,ou=People,dc=example' }
- allow(oauth_user).to receive(:ldap_person).and_return(ldap_user)
+ allow(ldap_user).to receive(:dn) { dn }
+ allow(Gitlab::LDAP::Person).to receive(:find_by_uid).and_return(ldap_user)
end
context "and no account for the LDAP user" do
@@ -341,7 +342,7 @@ describe Gitlab::OAuth::User do
end
context 'and LDAP user has an account already' do
- let!(:existing_user) { create(:omniauth_user, email: 'john@example.com', extern_uid: 'uid=user1,ou=People,dc=example', provider: 'ldapmain', username: 'john') }
+ let!(:existing_user) { create(:omniauth_user, email: 'john@example.com', extern_uid: dn, provider: 'ldapmain', username: 'john') }
context 'dont block on create (LDAP)' do
before do
diff --git a/spec/lib/gitlab/saml/user_spec.rb b/spec/lib/gitlab/saml/user_spec.rb
index c6cade99daa..59923bfb14d 100644
--- a/spec/lib/gitlab/saml/user_spec.rb
+++ b/spec/lib/gitlab/saml/user_spec.rb
@@ -1,9 +1,12 @@
require 'spec_helper'
describe Gitlab::Saml::User do
+ include LdapHelpers
+
let(:saml_user) { described_class.new(auth_hash) }
let(:gl_user) { saml_user.gl_user }
let(:uid) { 'my-uid' }
+ let(:dn) { 'uid=user1,ou=People,dc=example' }
let(:provider) { 'saml' }
let(:auth_hash) { OmniAuth::AuthHash.new(uid: uid, provider: provider, info: info_hash, extra: { raw_info: OneLogin::RubySaml::Attributes.new({ 'groups' => %w(Developers Freelancers Designers) }) }) }
let(:info_hash) do
@@ -163,14 +166,17 @@ describe Gitlab::Saml::User do
end
context 'and a corresponding LDAP person' do
+ let(:adapter) { ldap_adapter('ldapmain') }
+
before do
allow(ldap_user).to receive(:uid) { uid }
allow(ldap_user).to receive(:username) { uid }
allow(ldap_user).to receive(:email) { %w(john@mail.com john2@example.com) }
- allow(ldap_user).to receive(:dn) { 'uid=user1,ou=People,dc=example' }
- allow(Gitlab::LDAP::Person).to receive(:find_by_uid).and_return(ldap_user)
- allow(Gitlab::LDAP::Person).to receive(:find_by_dn).and_return(ldap_user)
- allow(Gitlab::LDAP::Person).to receive(:find_by_email).and_return(ldap_user)
+ allow(ldap_user).to receive(:dn) { dn }
+ allow(Gitlab::LDAP::Adapter).to receive(:new).and_return(adapter)
+ allow(Gitlab::LDAP::Person).to receive(:find_by_uid).with(uid, adapter).and_return(ldap_user)
+ allow(Gitlab::LDAP::Person).to receive(:find_by_dn).with(dn, adapter).and_return(ldap_user)
+ allow(Gitlab::LDAP::Person).to receive(:find_by_email).with('john@mail.com', adapter).and_return(ldap_user)
end
context 'and no account for the LDAP user' do
@@ -182,28 +188,51 @@ describe Gitlab::Saml::User do
expect(gl_user.email).to eql 'john@mail.com'
expect(gl_user.identities.length).to be 2
identities_as_hash = gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
- expect(identities_as_hash).to match_array([{ provider: 'ldapmain', extern_uid: 'uid=user1,ou=People,dc=example' },
+ expect(identities_as_hash).to match_array([{ provider: 'ldapmain', extern_uid: dn },
{ provider: 'saml', extern_uid: uid }])
end
end
context 'and LDAP user has an account already' do
+ let(:auth_hash_base_attributes) do
+ {
+ uid: uid,
+ provider: provider,
+ info: info_hash,
+ extra: {
+ raw_info: OneLogin::RubySaml::Attributes.new(
+ { 'groups' => %w(Developers Freelancers Designers) }
+ )
+ }
+ }
+ end
+ let(:auth_hash) { OmniAuth::AuthHash.new(auth_hash_base_attributes) }
+ let(:uid_types) { %w(uid dn email) }
+
before do
create(:omniauth_user,
email: 'john@mail.com',
- extern_uid: 'uid=user1,ou=People,dc=example',
+ extern_uid: dn,
provider: 'ldapmain',
username: 'john')
end
- shared_examples 'find ldap person' do |uid_type, uid|
+ shared_examples 'find LDAP person' do |uid_type, uid|
+ let(:auth_hash) { OmniAuth::AuthHash.new(auth_hash_base_attributes.merge(uid: extern_uid)) }
+
before do
+ nil_types = uid_types - [uid_type]
+
+ nil_types.each do |type|
+ allow(Gitlab::LDAP::Person).to receive(:"find_by_#{type}").and_return(nil)
+ end
+
allow(Gitlab::LDAP::Person).to receive(:"find_by_#{uid_type}").and_return(ldap_user)
end
it 'adds the omniauth identity to the LDAP account' do
identities = [
- { provider: 'ldapmain', extern_uid: 'uid=user1,ou=People,dc=example' },
+ { provider: 'ldapmain', extern_uid: dn },
{ provider: 'saml', extern_uid: extern_uid }
]
@@ -222,53 +251,20 @@ describe Gitlab::Saml::User do
end
context 'when uid is an uid' do
- it_behaves_like 'find ldap person', 'uid' do
+ it_behaves_like 'find LDAP person', 'uid' do
let(:extern_uid) { uid }
- let(:auth_hash) do
- OmniAuth::AuthHash.new(
- uid: uid,
- provider: provider,
- info: info_hash,
- extra: {
- raw_info: OneLogin::RubySaml::Attributes.new(
- { 'groups' => %w(Developers Freelancers Designers) }
- )
- })
- end
end
end
context 'when uid is a dn' do
- it_behaves_like 'find ldap person', 'email' do
- let(:extern_uid) { 'uid=user1,ou=People,dc=example' }
- let(:auth_hash) do
- OmniAuth::AuthHash.new(
- uid: extern_uid,
- provider: provider,
- info: info_hash,
- extra: {
- raw_info: OneLogin::RubySaml::Attributes.new(
- { 'groups' => %w(Developers Freelancers Designers) }
- )
- })
- end
+ it_behaves_like 'find LDAP person', 'dn' do
+ let(:extern_uid) { dn }
end
end
context 'when uid is an email' do
- it_behaves_like 'find ldap person', 'email' do
+ it_behaves_like 'find LDAP person', 'email' do
let(:extern_uid) { 'john@mail.com' }
- let(:auth_hash) do
- OmniAuth::AuthHash.new(
- uid: extern_uid,
- provider: provider,
- info: info_hash,
- extra: {
- raw_info: OneLogin::RubySaml::Attributes.new(
- { 'groups' => %w(Developers Freelancers Designers) }
- )
- })
- end
end
end
@@ -280,7 +276,7 @@ describe Gitlab::Saml::User do
expect(gl_user.email).to eql 'john@mail.com'
expect(gl_user.identities.length).to be 2
identities_as_hash = gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
- expect(identities_as_hash).to match_array([{ provider: 'ldapmain', extern_uid: 'uid=user1,ou=People,dc=example' },
+ expect(identities_as_hash).to match_array([{ provider: 'ldapmain', extern_uid: dn },
{ provider: 'saml', extern_uid: uid }])
end
@@ -296,17 +292,21 @@ describe Gitlab::Saml::User do
context 'user has SAML user, and wants to add their LDAP identity' do
it 'adds the LDAP identity to the existing SAML user' do
- create(:omniauth_user, email: 'john@mail.com', extern_uid: 'uid=user1,ou=People,dc=example', provider: 'saml', username: 'john')
- local_hash = OmniAuth::AuthHash.new(uid: 'uid=user1,ou=People,dc=example', provider: provider, info: info_hash)
+ create(:omniauth_user, email: 'john@mail.com', extern_uid: dn, provider: 'saml', username: 'john')
+
+ allow(Gitlab::LDAP::Person).to receive(:find_by_uid).with(dn, adapter).and_return(ldap_user)
+
+ local_hash = OmniAuth::AuthHash.new(uid: dn, provider: provider, info: info_hash)
local_saml_user = described_class.new(local_hash)
+
local_saml_user.save
local_gl_user = local_saml_user.gl_user
expect(local_gl_user).to be_valid
expect(local_gl_user.identities.length).to be 2
identities_as_hash = local_gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
- expect(identities_as_hash).to match_array([{ provider: 'ldapmain', extern_uid: 'uid=user1,ou=People,dc=example' },
- { provider: 'saml', extern_uid: 'uid=user1,ou=People,dc=example' }])
+ expect(identities_as_hash).to match_array([{ provider: 'ldapmain', extern_uid: dn },
+ { provider: 'saml', extern_uid: dn }])
end
end
end
From 581272f6d4cfb81b864179df0a69f482d747fa7b Mon Sep 17 00:00:00 2001
From: Jacob Vosmaer
Date: Mon, 2 Oct 2017 14:39:09 +0200
Subject: [PATCH 260/263] Log update-ref errors in OperationService
---
lib/gitlab/git/operation_service.rb | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/gitlab/git/operation_service.rb b/lib/gitlab/git/operation_service.rb
index 786e2e7e8dc..d835dcca8ba 100644
--- a/lib/gitlab/git/operation_service.rb
+++ b/lib/gitlab/git/operation_service.rb
@@ -152,13 +152,15 @@ module Gitlab
# (and have!) accidentally reset the ref to an earlier state, clobbering
# commits. See also https://github.com/libgit2/libgit2/issues/1534.
command = %W[#{Gitlab.config.git.bin_path} update-ref --stdin -z]
- _, status = popen(
+
+ output, status = popen(
command,
repository.path) do |stdin|
stdin.write("update #{ref}\x00#{newrev}\x00#{oldrev}\x00")
end
unless status.zero?
+ Gitlab::GitLogger.error("'git update-ref' in #{repository.path}: #{output}")
raise Gitlab::Git::CommitError.new(
"Could not update branch #{Gitlab::Git.branch_name(ref)}." \
" Please refresh and try again.")
From a5d47bb063624bb30064c8e44c05de05bb63b25a Mon Sep 17 00:00:00 2001
From: Sean McGivern
Date: Mon, 2 Oct 2017 13:51:51 +0100
Subject: [PATCH 261/263] Revert "Increase diff limits to 100 KB for collapse
and 200 KB overall"
This reverts commit 1d3c33b57eeb39df76e78fd37c86532c02aa22ac.
---
lib/gitlab/git/diff.rb | 48 +++++----------------
spec/lib/gitlab/git/diff_collection_spec.rb | 3 +-
spec/lib/gitlab/git/diff_spec.rb | 38 ++--------------
3 files changed, 15 insertions(+), 74 deletions(-)
diff --git a/lib/gitlab/git/diff.rb b/lib/gitlab/git/diff.rb
index 096301d300f..ca94b4baa59 100644
--- a/lib/gitlab/git/diff.rb
+++ b/lib/gitlab/git/diff.rb
@@ -24,41 +24,13 @@ module Gitlab
SERIALIZE_KEYS = %i(diff new_path old_path a_mode b_mode new_file renamed_file deleted_file too_large).freeze
+ # The maximum size of a diff to display.
+ SIZE_LIMIT = 100.kilobytes
+
+ # The maximum size before a diff is collapsed.
+ COLLAPSE_LIMIT = 10.kilobytes
+
class << self
- # The maximum size of a diff to display.
- def size_limit
- if RequestStore.active?
- RequestStore['gitlab_git_diff_size_limit'] ||= find_size_limit
- else
- find_size_limit
- end
- end
-
- # The maximum size before a diff is collapsed.
- def collapse_limit
- if RequestStore.active?
- RequestStore['gitlab_git_diff_collapse_limit'] ||= find_collapse_limit
- else
- find_collapse_limit
- end
- end
-
- def find_size_limit
- if Feature.enabled?('gitlab_git_diff_size_limit_increase')
- 200.kilobytes
- else
- 100.kilobytes
- end
- end
-
- def find_collapse_limit
- if Feature.enabled?('gitlab_git_diff_size_limit_increase')
- 100.kilobytes
- else
- 10.kilobytes
- end
- end
-
def between(repo, head, base, options = {}, *paths)
straight = options.delete(:straight) || false
@@ -172,7 +144,7 @@ module Gitlab
def too_large?
if @too_large.nil?
- @too_large = @diff.bytesize >= self.class.size_limit
+ @too_large = @diff.bytesize >= SIZE_LIMIT
else
@too_large
end
@@ -190,7 +162,7 @@ module Gitlab
def collapsed?
return @collapsed if defined?(@collapsed)
- @collapsed = !expanded && @diff.bytesize >= self.class.collapse_limit
+ @collapsed = !expanded && @diff.bytesize >= COLLAPSE_LIMIT
end
def collapse!
@@ -275,14 +247,14 @@ module Gitlab
hunk.each_line do |line|
size += line.content.bytesize
- if size >= self.class.size_limit
+ if size >= SIZE_LIMIT
too_large!
return true
end
end
end
- if !expanded && size >= self.class.collapse_limit
+ if !expanded && size >= COLLAPSE_LIMIT
collapse!
return true
end
diff --git a/spec/lib/gitlab/git/diff_collection_spec.rb b/spec/lib/gitlab/git/diff_collection_spec.rb
index 3494f0cc98d..ee657101f4c 100644
--- a/spec/lib/gitlab/git/diff_collection_spec.rb
+++ b/spec/lib/gitlab/git/diff_collection_spec.rb
@@ -341,8 +341,7 @@ describe Gitlab::Git::DiffCollection, seed_helper: true do
end
context 'when diff is quite large will collapse by default' do
- let(:iterator) { [{ diff: 'a' * (Gitlab::Git::Diff.collapse_limit + 1) }] }
- let(:max_files) { 100 }
+ let(:iterator) { [{ diff: 'a' * 20480 }] }
context 'when no collapse is set' do
let(:expanded) { true }
diff --git a/spec/lib/gitlab/git/diff_spec.rb b/spec/lib/gitlab/git/diff_spec.rb
index d39b33a0c05..4a7b06003fc 100644
--- a/spec/lib/gitlab/git/diff_spec.rb
+++ b/spec/lib/gitlab/git/diff_spec.rb
@@ -31,36 +31,6 @@ EOT
[".gitmodules"]).patches.first
end
- describe 'size limit feature toggles' do
- context 'when the feature gitlab_git_diff_size_limit_increase is enabled' do
- before do
- stub_feature_flags(gitlab_git_diff_size_limit_increase: true)
- end
-
- it 'returns 200 KB for size_limit' do
- expect(described_class.size_limit).to eq(200.kilobytes)
- end
-
- it 'returns 100 KB for collapse_limit' do
- expect(described_class.collapse_limit).to eq(100.kilobytes)
- end
- end
-
- context 'when the feature gitlab_git_diff_size_limit_increase is disabled' do
- before do
- stub_feature_flags(gitlab_git_diff_size_limit_increase: false)
- end
-
- it 'returns 100 KB for size_limit' do
- expect(described_class.size_limit).to eq(100.kilobytes)
- end
-
- it 'returns 10 KB for collapse_limit' do
- expect(described_class.collapse_limit).to eq(10.kilobytes)
- end
- end
- end
-
describe '.new' do
context 'using a Hash' do
context 'with a small diff' do
@@ -77,7 +47,7 @@ EOT
context 'using a diff that is too large' do
it 'prunes the diff' do
- diff = described_class.new(diff: 'a' * (described_class.size_limit + 1))
+ diff = described_class.new(diff: 'a' * 204800)
expect(diff.diff).to be_empty
expect(diff).to be_too_large
@@ -115,8 +85,8 @@ EOT
# The patch total size is 200, with lines between 21 and 54.
# This is a quick-and-dirty way to test this. Ideally, a new patch is
# added to the test repo with a size that falls between the real limits.
- allow(Gitlab::Git::Diff).to receive(:size_limit).and_return(150)
- allow(Gitlab::Git::Diff).to receive(:collapse_limit).and_return(100)
+ stub_const("#{described_class}::SIZE_LIMIT", 150)
+ stub_const("#{described_class}::COLLAPSE_LIMIT", 100)
end
it 'prunes the diff as a large diff instead of as a collapsed diff' do
@@ -356,7 +326,7 @@ EOT
describe '#collapsed?' do
it 'returns true for a diff that is quite large' do
- diff = described_class.new({ diff: 'a' * (described_class.collapse_limit + 1) }, expanded: false)
+ diff = described_class.new({ diff: 'a' * 20480 }, expanded: false)
expect(diff).to be_collapsed
end
From 15bebda7f8621ebae87c9ee5a79b4a016eff35b9 Mon Sep 17 00:00:00 2001
From: Stan Hu
Date: Sat, 30 Sep 2017 14:22:52 -0700
Subject: [PATCH 262/263] Make Redcarpet Markdown renderer thread-safe
The Redcarpet library is not thread-safe as described in
https://github.com/vmg/redcarpet/issues/570. Since we instantiate
the Redcarpet renderer in a class variable, multiple Sidekiq threads
can access the work buffer and corrupt the state. We work around
this issue by memoizing the renderer on a thread basis.
Closes #36637
---
.../unreleased/sh-thread-safe-markdown.yml | 5 +++
lib/banzai/filter/markdown_filter.rb | 32 ++++++++-----------
2 files changed, 19 insertions(+), 18 deletions(-)
create mode 100644 changelogs/unreleased/sh-thread-safe-markdown.yml
diff --git a/changelogs/unreleased/sh-thread-safe-markdown.yml b/changelogs/unreleased/sh-thread-safe-markdown.yml
new file mode 100644
index 00000000000..af7d9d58a9f
--- /dev/null
+++ b/changelogs/unreleased/sh-thread-safe-markdown.yml
@@ -0,0 +1,5 @@
+---
+title: Make Redcarpet Markdown renderer thread-safe
+merge_request:
+author:
+type: fixed
diff --git a/lib/banzai/filter/markdown_filter.rb b/lib/banzai/filter/markdown_filter.rb
index ee73fa91589..9cac303e645 100644
--- a/lib/banzai/filter/markdown_filter.rb
+++ b/lib/banzai/filter/markdown_filter.rb
@@ -1,6 +1,18 @@
module Banzai
module Filter
class MarkdownFilter < HTML::Pipeline::TextFilter
+ # https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use
+ REDCARPET_OPTIONS = {
+ fenced_code_blocks: true,
+ footnotes: true,
+ lax_spacing: true,
+ no_intra_emphasis: true,
+ space_after_headers: true,
+ strikethrough: true,
+ superscript: true,
+ tables: true
+ }.freeze
+
def initialize(text, context = nil, result = nil)
super text, context, result
@text = @text.delete "\r"
@@ -13,27 +25,11 @@ module Banzai
end
def self.renderer
- @renderer ||= begin
+ Thread.current[:banzai_markdown_renderer] ||= begin
renderer = Banzai::Renderer::HTML.new
- Redcarpet::Markdown.new(renderer, redcarpet_options)
+ Redcarpet::Markdown.new(renderer, REDCARPET_OPTIONS)
end
end
-
- def self.redcarpet_options
- # https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use
- @redcarpet_options ||= {
- fenced_code_blocks: true,
- footnotes: true,
- lax_spacing: true,
- no_intra_emphasis: true,
- space_after_headers: true,
- strikethrough: true,
- superscript: true,
- tables: true
- }.freeze
- end
-
- private_class_method :redcarpet_options
end
end
end
From bac29160302549c3c651991bf839b304a9e1c8b4 Mon Sep 17 00:00:00 2001
From: Stan Hu
Date: Fri, 29 Sep 2017 17:20:56 -0700
Subject: [PATCH 263/263] Fix gitlab-rake gitlab:import:repos task
Because of a change in GitLab 9.5.4 to prevent users from assuming control of
a repository already on disk, the import task broke. Imports would fail with
the message, "There is already a repository with that name on disk".
This change skips the validation when the import is done from the
command-line.
Closes #37682
---
app/models/project.rb | 6 ++++--
changelogs/unreleased/sh-fix-import-repos.yml | 5 +++++
lib/gitlab/bare_repository_importer.rb | 3 ++-
spec/models/project_spec.rb | 11 +++++++++++
spec/services/projects/create_service_spec.rb | 9 +++++++++
5 files changed, 31 insertions(+), 3 deletions(-)
create mode 100644 changelogs/unreleased/sh-fix-import-repos.yml
diff --git a/app/models/project.rb b/app/models/project.rb
index bb3f74c4b89..44d1190cc5b 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -72,6 +72,7 @@ class Project < ActiveRecord::Base
attr_accessor :old_path_with_namespace
attr_accessor :template_name
attr_writer :pipeline_status
+ attr_accessor :skip_disk_validation
alias_attribute :title, :name
@@ -227,7 +228,7 @@ class Project < ActiveRecord::Base
validates :import_url, importable_url: true, if: [:external_import?, :import_url_changed?]
validates :star_count, numericality: { greater_than_or_equal_to: 0 }
validate :check_limit, on: :create
- validate :can_create_repository?, on: [:create, :update], if: ->(project) { !project.persisted? || project.renamed? }
+ validate :check_repository_path_availability, on: [:create, :update], if: ->(project) { !project.persisted? || project.renamed? }
validate :avatar_type,
if: ->(project) { project.avatar.present? && project.avatar_changed? }
validates :avatar, file_size: { maximum: 200.kilobytes.to_i }
@@ -1018,7 +1019,8 @@ class Project < ActiveRecord::Base
end
# Check if repository already exists on disk
- def can_create_repository?
+ def check_repository_path_availability
+ return true if skip_disk_validation
return false unless repository_storage_path
expires_full_path_cache # we need to clear cache to validate renames correctly
diff --git a/changelogs/unreleased/sh-fix-import-repos.yml b/changelogs/unreleased/sh-fix-import-repos.yml
new file mode 100644
index 00000000000..5764b3bdc01
--- /dev/null
+++ b/changelogs/unreleased/sh-fix-import-repos.yml
@@ -0,0 +1,5 @@
+---
+title: Fix gitlab-rake gitlab:import:repos task failing
+merge_request:
+author:
+type: fixed
diff --git a/lib/gitlab/bare_repository_importer.rb b/lib/gitlab/bare_repository_importer.rb
index 9323bfc7fb2..1d98d187805 100644
--- a/lib/gitlab/bare_repository_importer.rb
+++ b/lib/gitlab/bare_repository_importer.rb
@@ -56,7 +56,8 @@ module Gitlab
name: project_path,
path: project_path,
repository_storage: storage_name,
- namespace_id: group&.id
+ namespace_id: group&.id,
+ skip_disk_validation: true
}
project = Projects::CreateService.new(user, project_params).execute
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 868a843ab0a..c94481d53c3 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -2793,6 +2793,17 @@ describe Project do
end
end
+ describe '#check_repository_path_availability' do
+ let(:project) { build(:project) }
+
+ it 'skips gitlab-shell exists?' do
+ project.skip_disk_validation = true
+
+ expect(project.gitlab_shell).not_to receive(:exists?)
+ expect(project.check_repository_path_availability).to be_truthy
+ end
+ end
+
describe '#latest_successful_pipeline_for_default_branch' do
let(:project) { build(:project) }
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb
index c2ec805ea99..35f0c85b0ec 100644
--- a/spec/services/projects/create_service_spec.rb
+++ b/spec/services/projects/create_service_spec.rb
@@ -209,6 +209,15 @@ describe Projects::CreateService, '#execute' do
end
end
+ context 'when skip_disk_validation is used' do
+ it 'sets the project attribute' do
+ opts[:skip_disk_validation] = true
+ project = create_project(user, opts)
+
+ expect(project.skip_disk_validation).to be_truthy
+ end
+ end
+
def create_project(user, opts)
Projects::CreateService.new(user, opts).execute
end
|