diff options
-rw-r--r-- | lib/tasks/mirrorrepos.rake | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/tasks/mirrorrepos.rake b/lib/tasks/mirrorrepos.rake index b71a255..5e4ab06 100644 --- a/lib/tasks/mirrorrepos.rake +++ b/lib/tasks/mirrorrepos.rake @@ -23,27 +23,34 @@ namespace :mirror do task :symlinkedrepos => :environment do default_mirror_base_path = "#{GitoriousConfig['repository_base_path']}/../mirrored-public-repos" mirror_base = GitoriousConfig["symlinked_mirror_repo_base"] || default_mirror_base_path + mirror_base_new = "#{mirror_base}.new" + owner = GitoriousConfig["gitorious_user"] # create symlink dir if not there already - puts `mkdir -p #{mirror_base}` - - # remove any current symlinks - puts `rm -rf #{mirror_base}/*` + `mkdir -p #{mirror_base_new}` + raise "Failed to create #{mirror_base_new}" unless $?.success? # rebuild symlinks for all standard repos (omit private repos, wiki repos etc) repo_data = Repository.regular.each do |r| if !r.private? actual_path = "#{GitoriousConfig["repository_base_path"]}/#{r.real_gitdir}" repo_parent_dir = Pathname.new(r.url_path).dirname - project_dir = "#{mirror_base}/#{repo_parent_dir}" - puts `mkdir -p #{project_dir}` + project_dir = "#{mirror_base_new}/#{repo_parent_dir}" + `mkdir -p #{project_dir}` + raise "Failed to create #{project_dir}/*" unless $?.success? symlink_path = "#{project_dir}/#{r.name}" - puts `ln -fs #{actual_path} #{symlink_path}` + `ln -fs #{actual_path} #{symlink_path}` + raise "Failed to link #{actual_path} to #{symlink_path}" unless $?.success? end end # make sure gitorious user owns all repo symlinks - puts `chown -R #{owner}:#{owner} #{mirror_base}` + `chown -R #{owner}:#{owner} #{mirror_base_new}` + raise "Failed to chown #{mirror_base_new}" unless $?.success? + + # remove any current symlinks + `rm -rf #{mirror_base}.old && mv #{mirror_base} #{mirror_base}.old && mv #{mirror_base_new} #{mirror_base} &&rm -rf #{mirror_base}.old` + raise "Failed to rename #{mirror_base}" unless $?.success? end end |