From 8acb0f55961500658377a1f941584dddb7952570 Mon Sep 17 00:00:00 2001 From: James Lopez Date: Wed, 7 Jun 2017 16:50:21 +0200 Subject: [PATCH] refactor code and spec --- lib/backup/repository.rb | 46 +++++++++++------------ spec/lib/gitlab/backup/repository_spec.rb | 13 ++----- 2 files changed, 25 insertions(+), 34 deletions(-) diff --git a/lib/backup/repository.rb b/lib/backup/repository.rb index 7723f9979b3..8e6235c2014 100644 --- a/lib/backup/repository.rb +++ b/lib/backup/repository.rb @@ -7,7 +7,7 @@ module Backup prepare Project.find_each(batch_size: 1000) do |project| - $progress.print " * #{project.path_with_namespace} ... " + progress.print " * #{project.path_with_namespace} ... " path_to_project_repo = path_to_repo(project) path_to_project_bundle = path_to_bundle(project) @@ -15,7 +15,7 @@ module Backup FileUtils.mkdir_p(File.join(backup_repos_path, project.namespace.full_path)) if project.namespace if empty_repo?(project) - $progress.puts "[SKIPPED]".color(:cyan) + progress.puts "[SKIPPED]".color(:cyan) else in_path(path_to_project_repo) do |dir| FileUtils.mkdir_p(path_to_tars(project)) @@ -31,7 +31,7 @@ module Backup output, status = Gitlab::Popen.popen(cmd) if status.zero? - $progress.puts "[DONE]".color(:green) + progress.puts "[DONE]".color(:green) else progress_warn(project, cmd.join(' '), output) end @@ -42,14 +42,14 @@ module Backup path_to_wiki_bundle = path_to_bundle(wiki) if File.exist?(path_to_wiki_repo) - $progress.print " * #{wiki.path_with_namespace} ... " + progress.print " * #{wiki.path_with_namespace} ... " if empty_wiki_repo?(wiki) - $progress.puts " [SKIPPED]".color(:cyan) + progress.puts " [SKIPPED]".color(:cyan) else cmd = %W(#{Gitlab.config.git.bin_path} --git-dir=#{path_to_wiki_repo} bundle create #{path_to_wiki_bundle} --all) output, status = Gitlab::Popen.popen(cmd) if status.zero? - $progress.puts " [DONE]".color(:green) + progress.puts " [DONE]".color(:green) else progress_warn(wiki, cmd.join(' '), output) end @@ -71,7 +71,7 @@ module Backup end Project.find_each(batch_size: 1000) do |project| - $progress.print " * #{project.path_with_namespace} ... " + progress.print " * #{project.path_with_namespace} ... " path_to_project_repo = path_to_repo(project) path_to_project_bundle = path_to_bundle(project) @@ -85,7 +85,7 @@ module Backup output, status = Gitlab::Popen.popen(cmd) if status.zero? - $progress.puts "[DONE]".color(:green) + progress.puts "[DONE]".color(:green) else progress_warn(project, cmd.join(' '), output) end @@ -104,7 +104,7 @@ module Backup path_to_wiki_bundle = path_to_bundle(wiki) if File.exist?(path_to_wiki_bundle) - $progress.print " * #{wiki.path_with_namespace} ... " + progress.print " * #{wiki.path_with_namespace} ... " # If a wiki bundle exists, first remove the empty repo # that was initialized with ProjectWiki.new() and then @@ -114,19 +114,19 @@ module Backup output, status = Gitlab::Popen.popen(cmd) if status.zero? - $progress.puts " [DONE]".color(:green) + progress.puts " [DONE]".color(:green) else progress_warn(project, cmd.join(' '), output) end end end - $progress.print 'Put GitLab hooks in repositories dirs'.color(:yellow) + progress.print 'Put GitLab hooks in repositories dirs'.color(:yellow) cmd = %W(#{Gitlab.config.gitlab_shell.path}/bin/create-hooks) + repository_storage_paths_args output, status = Gitlab::Popen.popen(cmd) if status.zero? - $progress.puts " [DONE]".color(:green) + progress.puts " [DONE]".color(:green) else puts " [FAILED]".color(:red) puts "failed: #{cmd}" @@ -184,22 +184,14 @@ module Backup private def progress_warn(project, cmd, output) - $progress.puts "[WARNING] Executing #{cmd}".color(:orange) - $progress.puts "Ignoring error on #{project.path_with_namespace} - #{output}".color(:orange) + progress.puts "[WARNING] Executing #{cmd}".color(:orange) + progress.puts "Ignoring error on #{project.path_with_namespace} - #{output}".color(:orange) end - def empty_repo?(project) - project.empty_repo? + def empty_repo?(project_or_wiki) + project_or_wiki.repository.empty_repo? rescue => e - $progress.puts "Ignoring error on #{project.full_path} repository - #{e.message}".color(:orange) - - false - end - - def empty_wiki_repo?(wiki) - wiki.repository.empty? - rescue => e - $progress.puts "Ignoring error on #{wiki.path_with_namespace} repository - #{e.message}".color(:orange) + progress.puts "Ignoring repository error and continuing backing up project: #{project_or_wiki.path_with_namespace} - #{e.message}".color(:orange) false end @@ -207,5 +199,9 @@ module Backup def repository_storage_paths_args Gitlab.config.repositories.storages.values.map { |rs| rs['path'] } end + + def progress + progress + end end end diff --git a/spec/lib/gitlab/backup/repository_spec.rb b/spec/lib/gitlab/backup/repository_spec.rb index 7d0d537f2f2..51c1e9d657b 100644 --- a/spec/lib/gitlab/backup/repository_spec.rb +++ b/spec/lib/gitlab/backup/repository_spec.rb @@ -12,18 +12,13 @@ describe Backup::Repository, lib: true do string end - @old_progress = $progress # rubocop:disable Style/GlobalVars - $progress = progress # rubocop:disable Style/GlobalVars - end - - after do - $progress = @old_progress # rubocop:disable Style/GlobalVars + allow_any_instance_of(described_class).to receive(:progress).and_return(progress) end describe '#dump' do describe 'repo failure' do before do - allow_any_instance_of(Project).to receive(:empty_repo?).and_raise(Rugged::OdbError) + allow_any_instance_of(Repository).to receive(:empty_repo?).and_raise(Rugged::OdbError) allow(Gitlab::Popen).to receive(:popen).and_return(['normal output', 0]) end @@ -34,13 +29,13 @@ describe Backup::Repository, lib: true do it 'shows the appropriate error' do described_class.new.dump - expect(progress).to have_received(:puts).with("Ignoring error on #{project.full_path} repository - Rugged::OdbError") + expect(progress).to have_received(:puts).with("Ignoring repository error and continuing backing up project: #{project.full_path} - Rugged::OdbError") end end describe 'command failure' do before do - allow_any_instance_of(Project).to receive(:empty_repo?).and_return(false) + allow_any_instance_of(Repository).to receive(:empty_repo?).and_return(false) allow(Gitlab::Popen).to receive(:popen).and_return(['error', 1]) end