summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Vosmaer <contact@jacobvosmaer.nl>2015-10-01 11:48:08 +0200
committerJacob Vosmaer <contact@jacobvosmaer.nl>2015-10-01 11:48:08 +0200
commit33c8d4879f34402876980d40716a64ae6f888347 (patch)
tree55d7a5a844c7e3cec5ff6ad0203e5383b5e0204a
parent979a6df4755a114e38cd1825be40cb07225f1fb4 (diff)
parent57bc57298c64f40a0a851e474b3e6de91a551ec5 (diff)
downloadgitlab-shell-33c8d4879f34402876980d40716a64ae6f888347.tar.gz
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-shell into no-init-on-gcryptsetup
-rw-r--r--CHANGELOG7
-rw-r--r--VERSION2
-rw-r--r--lib/gitlab_projects.rb16
-rw-r--r--lib/gitlab_shell.rb3
-rw-r--r--spec/gitlab_projects_spec.rb45
5 files changed, 68 insertions, 5 deletions
diff --git a/CHANGELOG b/CHANGELOG
index f7dc957..0c07901 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,10 @@
+v2.6.6 (unreleased)
+ - Do not clean LANG environment variable for the git hooks when working through the SSH-protocol
+ - Add git-lfs-authenticate command to white list (this command is used by git-lfs for SSO authentication through SSH-protocol)
+
+v2.6.5
+ - Handle broken symlinks in create-hooks
+
v2.6.4
- Remove keys from authorized_keys in-place
- Increase batch_add_keys lock timeout to 300 seconds
diff --git a/VERSION b/VERSION
index 2714f53..57cf282 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.6.4
+2.6.5
diff --git a/lib/gitlab_projects.rb b/lib/gitlab_projects.rb
index 11f3820..8bf000d 100644
--- a/lib/gitlab_projects.rb
+++ b/lib/gitlab_projects.rb
@@ -21,11 +21,19 @@ class GitlabProjects
def self.create_hooks(path)
local_hooks_directory = File.join(path, 'hooks')
+ real_local_hooks_directory = :not_found
+ begin
+ real_local_hooks_directory = File.realpath(local_hooks_directory)
+ rescue Errno::ENOENT
+ # real_local_hooks_directory == :not_found
+ end
- if File.realpath(local_hooks_directory) != File.realpath(GLOBAL_HOOKS_DIRECTORY)
- $logger.info "Moving existing hooks directory and symlinking global hooks directory for #{path}."
- FileUtils.mv(local_hooks_directory, "#{local_hooks_directory}.old.#{Time.now.to_i}")
- FileUtils.ln_s(GLOBAL_HOOKS_DIRECTORY, local_hooks_directory)
+ if real_local_hooks_directory != File.realpath(GLOBAL_HOOKS_DIRECTORY)
+ if File.exist?(local_hooks_directory)
+ $logger.info "Moving existing hooks directory and symlinking global hooks directory for #{path}."
+ FileUtils.mv(local_hooks_directory, "#{local_hooks_directory}.old.#{Time.now.to_i}")
+ end
+ FileUtils.ln_sf(GLOBAL_HOOKS_DIRECTORY, local_hooks_directory)
else
$logger.info "Hooks already exist for #{path}."
true
diff --git a/lib/gitlab_shell.rb b/lib/gitlab_shell.rb
index cbfe468..4bc1cd7 100644
--- a/lib/gitlab_shell.rb
+++ b/lib/gitlab_shell.rb
@@ -111,6 +111,8 @@ class GitlabShell
$logger.info "gitlab-shell: executing git-annex command <#{parsed_args.join(' ')}> for #{log_username}."
exec_cmd(*parsed_args)
+ elsif @git_cmd == 'git-lfs-authenticate'
+ exec_cmd(@origin_cmd)
else
$logger.info "gitlab-shell: executing git command <#{@git_cmd} #{repo_full_path}> for #{log_username}."
exec_cmd(@git_cmd, repo_full_path)
@@ -122,6 +124,7 @@ class GitlabShell
env = {
'PATH' => ENV['PATH'],
'LD_LIBRARY_PATH' => ENV['LD_LIBRARY_PATH'],
+ 'LANG' => ENV['LANG'],
'GL_ID' => @key_id
}
diff --git a/spec/gitlab_projects_spec.rb b/spec/gitlab_projects_spec.rb
index e8875b6..50af42f 100644
--- a/spec/gitlab_projects_spec.rb
+++ b/spec/gitlab_projects_spec.rb
@@ -12,6 +12,51 @@ describe GitlabProjects do
FileUtils.rm_rf(tmp_repos_path)
end
+ describe :create_hooks do
+ let(:repo_path) { File.join(tmp_repos_path, 'hook-test.git') }
+ let(:hooks_dir) { File.join(repo_path, 'hooks') }
+ let(:target_hooks_dir) { File.join(ROOT_PATH, 'hooks') }
+ let(:existing_target) { File.join(repo_path, 'foobar') }
+
+ before do
+ FileUtils.rm_rf(repo_path)
+ FileUtils.mkdir_p(repo_path)
+ end
+
+ context 'hooks is a directory' do
+ let(:existing_file) { File.join(hooks_dir, 'my-file') }
+
+ before do
+ FileUtils.mkdir_p(hooks_dir)
+ FileUtils.touch(existing_file)
+ GitlabProjects.create_hooks(repo_path)
+ end
+
+ it { File.readlink(hooks_dir).should == target_hooks_dir }
+ it { Dir[File.join(repo_path, "hooks.old.*/my-file")].count.should == 1 }
+ end
+
+ context 'hooks is a valid symlink' do
+ before do
+ FileUtils.mkdir_p existing_target
+ File.symlink(existing_target, hooks_dir)
+ GitlabProjects.create_hooks(repo_path)
+ end
+
+ it { File.readlink(hooks_dir).should == target_hooks_dir }
+ end
+
+ context 'hooks is a broken symlink' do
+ before do
+ FileUtils.rm_f(existing_target)
+ File.symlink(existing_target, hooks_dir)
+ GitlabProjects.create_hooks(repo_path)
+ end
+
+ it { File.readlink(hooks_dir).should == target_hooks_dir }
+ end
+ end
+
describe :initialize do
before do
argv('add-project', repo_name)