summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/gitlab_projects.rb30
-rw-r--r--spec/gitlab_projects_spec.rb68
2 files changed, 98 insertions, 0 deletions
diff --git a/lib/gitlab_projects.rb b/lib/gitlab_projects.rb
index 8c280ea..c933296 100644
--- a/lib/gitlab_projects.rb
+++ b/lib/gitlab_projects.rb
@@ -26,6 +26,10 @@ class GitlabProjects
def exec
case @command
+ when 'create-branch'; create_branch
+ when 'rm-branch'; rm_branch
+ when 'create-tag'; create_tag
+ when 'rm-tag'; rm_tag
when 'add-project'; add_project
when 'rm-project'; rm_project
when 'mv-project'; mv_project
@@ -41,6 +45,32 @@ class GitlabProjects
protected
+ def create_branch
+ branch_name = ARGV.shift
+ ref = ARGV.shift || "HEAD"
+ cmd = "cd #{full_path} && git branch #{branch_name} #{ref}"
+ system(cmd)
+ end
+
+ def rm_branch
+ branch_name = ARGV.shift
+ cmd = "cd #{full_path} && git branch -D #{branch_name}"
+ system(cmd)
+ end
+
+ def create_tag
+ tag_name = ARGV.shift
+ ref = ARGV.shift || "HEAD"
+ cmd = "cd #{full_path} && git tag #{tag_name} #{ref}"
+ system(cmd)
+ end
+
+ def rm_tag
+ tag_name = ARGV.shift
+ cmd = "cd #{full_path} && git tag -d #{tag_name}"
+ system(cmd)
+ end
+
def add_project
$logger.info "Adding project #{@project_name} at <#{full_path}>."
FileUtils.mkdir_p(full_path, mode: 0770)
diff --git a/spec/gitlab_projects_spec.rb b/spec/gitlab_projects_spec.rb
index ba8187e..1c02430 100644
--- a/spec/gitlab_projects_spec.rb
+++ b/spec/gitlab_projects_spec.rb
@@ -22,6 +22,74 @@ describe GitlabProjects do
it { @gl_projects.instance_variable_get(:@full_path).should == "#{GitlabConfig.new.repos_path}/gitlab-ci.git" }
end
+ describe :create_branch do
+ let(:gl_projects_create) {
+ build_gitlab_projects('import-project', repo_name, 'https://github.com/randx/six.git')
+ }
+ let(:gl_projects) { build_gitlab_projects('create-branch', repo_name, 'test_branch', 'master') }
+
+ it "should create a branch" do
+ gl_projects_create.exec
+ gl_projects.exec
+ branch_ref = `cd #{tmp_repo_path} && git rev-parse test_branch`.strip
+ master_ref = `cd #{tmp_repo_path} && git rev-parse master`.strip
+ branch_ref.should == master_ref
+ end
+ end
+
+ describe :rm_branch do
+ let(:gl_projects_create) {
+ build_gitlab_projects('import-project', repo_name, 'https://github.com/randx/six.git')
+ }
+ let(:gl_projects_create_branch) {
+ build_gitlab_projects('create-branch', repo_name, 'test_branch', 'master')
+ }
+ let(:gl_projects) { build_gitlab_projects('rm-branch', repo_name, 'test_branch') }
+
+ it "should remove a branch" do
+ gl_projects_create.exec
+ gl_projects_create_branch.exec
+ branch_ref = `cd #{tmp_repo_path} && git rev-parse test_branch`.strip
+ gl_projects.exec
+ branch_del = `cd #{tmp_repo_path} && git rev-parse test_branch`.strip
+ branch_del.should_not == branch_ref
+ end
+ end
+
+ describe :create_tag do
+ let(:gl_projects_create) {
+ build_gitlab_projects('import-project', repo_name, 'https://github.com/randx/six.git')
+ }
+ let(:gl_projects) { build_gitlab_projects('create-tag', repo_name, 'test_tag', 'master') }
+
+ it "should create a tag" do
+ gl_projects_create.exec
+ gl_projects.exec
+ tag_ref = `cd #{tmp_repo_path} && git rev-parse test_tag`.strip
+ master_ref = `cd #{tmp_repo_path} && git rev-parse master`.strip
+ tag_ref.should == master_ref
+ end
+ end
+
+ describe :rm_tag do
+ let(:gl_projects_create) {
+ build_gitlab_projects('import-project', repo_name, 'https://github.com/randx/six.git')
+ }
+ let(:gl_projects_create_tag) {
+ build_gitlab_projects('create-tag', repo_name, 'test_tag', 'master')
+ }
+ let(:gl_projects) { build_gitlab_projects('rm-tag', repo_name, 'test_tag') }
+
+ it "should remove a branch" do
+ gl_projects_create.exec
+ gl_projects_create_tag.exec
+ branch_ref = `cd #{tmp_repo_path} && git rev-parse test_tag`.strip
+ gl_projects.exec
+ branch_del = `cd #{tmp_repo_path} && git rev-parse test_tag`.strip
+ branch_del.should_not == branch_ref
+ end
+ end
+
describe :add_project do
let(:gl_projects) { build_gitlab_projects('add-project', repo_name) }