summaryrefslogtreecommitdiff
path: root/spec/gitlab_projects_spec.rb
diff options
context:
space:
mode:
authorJacob Vosmaer <contact@jacobvosmaer.nl>2015-08-12 14:59:13 +0200
committerJacob Vosmaer <contact@jacobvosmaer.nl>2015-08-12 14:59:13 +0200
commita10d47232778e093f7810d8011f887e5453f9007 (patch)
tree86785917cd97bbe295a171975793c2c8fd9a8dbf /spec/gitlab_projects_spec.rb
parentc31e6165016e4f12483b4c328a62493adac1bcac (diff)
downloadgitlab-shell-create-hooks-broken-symlink.tar.gz
Handle broken symlinks in create-hookscreate-hooks-broken-symlink
If a repository contained a broken symlink named 'hooks', this would raise ENOENT in lib/gitlab_projects.rb, which got ignored in bin/create-hooks. This commit fixes that by making sure we handle broken symlinks in lib/gitlab_projects.rb.
Diffstat (limited to 'spec/gitlab_projects_spec.rb')
-rw-r--r--spec/gitlab_projects_spec.rb45
1 files changed, 45 insertions, 0 deletions
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)