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.rb24
1 files changed, 22 insertions, 2 deletions
diff --git a/lib/gitlab_projects.rb b/lib/gitlab_projects.rb
index 0f643b0..a40cc4f 100644
--- a/lib/gitlab_projects.rb
+++ b/lib/gitlab_projects.rb
@@ -4,6 +4,7 @@ require 'open3'
require_relative 'gitlab_config'
require_relative 'gitlab_logger'
+require_relative 'gitlab_reference_counter'
class GitlabProjects
GLOBAL_HOOKS_DIRECTORY = File.join(ROOT_PATH, 'hooks')
@@ -313,8 +314,13 @@ class GitlabProjects
# contents of the directory, as opposed to copying the directory by name
source_path = File.join(full_path, '')
- $logger.info "Syncing project #{@project_name} from <#{full_path}> to <#{new_full_path}>."
- system(*%W(rsync -a #{source_path} #{new_full_path}))
+ if wait_for_pushes
+ $logger.info "Syncing project #{@project_name} from <#{full_path}> to <#{new_full_path}>."
+ system(*%W(rsync -a --delete #{source_path} #{new_full_path}))
+ else
+ $logger.error "mv-storage failed: source path <#{full_path}> is waiting for pushes to finish."
+ false
+ end
end
def fork_project
@@ -361,4 +367,18 @@ class GitlabProjects
cmd = %W(git --git-dir=#{full_path} gc)
system(*cmd)
end
+
+ def wait_for_pushes
+ # Try for 30 seconds, polling every 10
+ 3.times do
+ return true if gitlab_reference_counter.value == 0
+ sleep 10
+ end
+
+ false
+ end
+
+ def gitlab_reference_counter
+ @gitlab_reference_counter ||= GitlabReferenceCounter.new(full_path)
+ end
end