diff options
-rw-r--r-- | lib/gitlab_projects.rb | 5 | ||||
-rw-r--r-- | spec/gitlab_projects_spec.rb | 23 |
2 files changed, 22 insertions, 6 deletions
diff --git a/lib/gitlab_projects.rb b/lib/gitlab_projects.rb index 154ada1..1c2128e 100644 --- a/lib/gitlab_projects.rb +++ b/lib/gitlab_projects.rb @@ -86,11 +86,16 @@ class GitlabProjects def fork_project new_namespace = ARGV.shift + # destination namespace must be provided return false unless new_namespace + #destination namespace must exist namespaced_path = File.join(repos_path, new_namespace) return false unless File.exists?(namespaced_path) + + #a project of the same name cannot already be within the destination namespace full_destination_path = File.join(namespaced_path, project_name) + return false if File.exists?(full_destination_path) cmd = "cd #{namespaced_path} && git clone --bare #{full_path} && #{create_hooks_to(full_destination_path)}" system(cmd) diff --git a/spec/gitlab_projects_spec.rb b/spec/gitlab_projects_spec.rb index f9d63b0..5c93f7c 100644 --- a/spec/gitlab_projects_spec.rb +++ b/spec/gitlab_projects_spec.rb @@ -79,19 +79,30 @@ describe GitlabProjects do describe :fork_project do let(:gl_project_import) { build_gitlab_projects('import-project', repo_name, 'https://github.com/randx/six.git') } - let(:gl_projects) { build_gitlab_projects('fork-project', repo_name, 'forked-to-namespace')} + let(:gl_projects_fork) { build_gitlab_projects('fork-project', repo_name, 'forked-to-namespace')} + let(:dest_repo) { File.join(tmp_repos_path, 'forked-to-namespace', repo_name) } before do FileUtils.mkdir_p(tmp_repo_path) - FileUtils.mkdir_p(File.join(tmp_repos_path, 'forked-to-namespace')) gl_project_import.exec end + it "should not fork into a namespace that doesn't exist" do + gl_projects_fork.exec.should be_false + end + it "should fork the repo" do - gl_projects.exec - File.exists?(File.join(tmp_repos_path, 'forked-to-namespace', repo_name)).should be_true - File.exists?(File.join(tmp_repos_path, 'forked-to-namespace', repo_name, '/hooks/update')).should be_true - File.exists?(File.join(tmp_repos_path, 'forked-to-namespace', repo_name, '/hooks/post-receive')).should be_true + # create destination namespace + FileUtils.mkdir_p(File.join(tmp_repos_path, 'forked-to-namespace')) + gl_projects_fork.exec.should be_true + File.exists?(dest_repo).should be_true + File.exists?(File.join(dest_repo, '/hooks/update')).should be_true + File.exists?(File.join(dest_repo, '/hooks/post-receive')).should be_true + end + + it "should not fork if a project of the same name already exists" do + #trying to fork again should fail as the repo already exists + gl_projects_fork.exec.should be_false end end |