diff options
author | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2015-10-01 11:48:08 +0200 |
---|---|---|
committer | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2015-10-01 11:48:08 +0200 |
commit | 33c8d4879f34402876980d40716a64ae6f888347 (patch) | |
tree | 55d7a5a844c7e3cec5ff6ad0203e5383b5e0204a | |
parent | 979a6df4755a114e38cd1825be40cb07225f1fb4 (diff) | |
parent | 57bc57298c64f40a0a851e474b3e6de91a551ec5 (diff) | |
download | gitlab-shell-33c8d4879f34402876980d40716a64ae6f888347.tar.gz |
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-shell into no-init-on-gcryptsetup
-rw-r--r-- | CHANGELOG | 7 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | lib/gitlab_projects.rb | 16 | ||||
-rw-r--r-- | lib/gitlab_shell.rb | 3 | ||||
-rw-r--r-- | spec/gitlab_projects_spec.rb | 45 |
5 files changed, 68 insertions, 5 deletions
@@ -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 @@ -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) |