summaryrefslogtreecommitdiff
path: root/lib/gitlab_projects.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab_projects.rb')
-rw-r--r--lib/gitlab_projects.rb47
1 files changed, 36 insertions, 11 deletions
diff --git a/lib/gitlab_projects.rb b/lib/gitlab_projects.rb
index 0b9bb8c..e60438e 100644
--- a/lib/gitlab_projects.rb
+++ b/lib/gitlab_projects.rb
@@ -2,6 +2,7 @@ require 'open3'
require 'fileutils'
require_relative 'gitlab_config'
+require_relative 'gitlab_logger'
class GitlabProjects
# Project name is a directory name for repository with .git at the end
@@ -31,6 +32,7 @@ class GitlabProjects
when 'import-project'; import_project
when 'fork-project'; fork_project
else
+ $logger.warn "Attempt to execute invalid gitlab-projects command #{@command.inspect}."
puts 'not allowed'
false
end
@@ -39,6 +41,7 @@ class GitlabProjects
protected
def add_project
+ $logger.info "Adding project #{@project_name} at <#{full_path}>."
FileUtils.mkdir_p(full_path, mode: 0770)
cmd = "cd #{full_path} && git init --bare && #{create_hooks_cmd}"
system(cmd)
@@ -49,6 +52,7 @@ class GitlabProjects
end
def rm_project
+ $logger.info "Removing project #{@project_name} from <#{full_path}>."
FileUtils.rm_rf(full_path)
end
@@ -56,6 +60,7 @@ class GitlabProjects
# URL must be publicly clonable
def import_project
@source = ARGV.shift
+ $logger.info "Importing project #{@project_name} from <#{@source}> to <#{full_path}>."
cmd = "cd #{repos_path} && git clone --bare #{@source} #{project_name} && #{create_hooks_cmd}"
system(cmd)
end
@@ -71,15 +76,26 @@ class GitlabProjects
def mv_project
new_path = ARGV.shift
- return false unless new_path
+ unless new_path
+ $logger.error "mv-project failed: no destination path provided."
+ return false
+ end
new_full_path = File.join(repos_path, new_path)
- # check if source repo exists
- # and target repo does not exist
- return false unless File.exists?(full_path)
- return false if File.exists?(new_full_path)
+ # verify that the source repo exists
+ unless File.exists?(full_path)
+ $logger.error "mv-project failed: source path <#{full_path}> does not exist."
+ return false
+ end
+
+ # ...and that the target repo does not exist
+ if File.exists?(new_full_path)
+ $logger.error "mv-project failed: destination path <#{new_full_path}> already exists."
+ return false
+ end
+ $logger.info "Moving project #{@project_name} from <#{full_path}> to <#{new_full_path}>."
FileUtils.mv(full_path, new_full_path)
end
@@ -87,16 +103,26 @@ class GitlabProjects
new_namespace = ARGV.shift
# destination namespace must be provided
- return false unless new_namespace
+ unless new_namespace
+ $logger.error "fork-project failed: no destination namespace provided."
+ return false
+ end
- #destination namespace must exist
+ # destination namespace must exist
namespaced_path = File.join(repos_path, new_namespace)
- return false unless File.exists?(namespaced_path)
+ unless File.exists?(namespaced_path)
+ $logger.error "fork-project failed: destination namespace <#{namespaced_path}> does not exist."
+ return false
+ end
- #a project of the same name cannot already be within the destination namespace
+ # a project of the same name cannot already be within the destination namespace
full_destination_path = File.join(namespaced_path, project_name.split('/')[-1])
- return false if File.exists?(full_destination_path)
+ if File.exists?(full_destination_path)
+ $logger.error "fork-project failed: destination repository <#{full_destination_path}> already exists."
+ return false
+ end
+ $logger.info "Forking project from <#{full_path}> to <#{full_destination_path}>."
cmd = "cd #{namespaced_path} && git clone --bare #{full_path} && #{create_hooks_to(full_destination_path)}"
system(cmd)
end
@@ -108,7 +134,6 @@ class GitlabProjects
up_hook_path = File.join(ROOT_PATH, 'hooks', 'update')
"ln -s #{pr_hook_path} #{dest_path}/hooks/post-receive && ln -s #{up_hook_path} #{dest_path}/hooks/update"
-
end
end