summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2017-11-06 09:11:26 +0100
committerJames Lopez <james@jameslopez.es>2017-11-06 16:15:11 +0100
commit4e440d697586204b2c8aa163f62967a280ad1c94 (patch)
tree7f48f03bed7b12e5085cc950aa52c51f335bf544
parentfcc4e171824adff85e8d822eb2c78049ade2bd05 (diff)
downloadgitlab-ce-4e440d697586204b2c8aa163f62967a280ad1c94.tar.gz
refactor and rename classes
-rw-r--r--lib/gitlab/bare_repository_import/bare_repository.rb30
-rw-r--r--lib/gitlab/bare_repository_import/importer.rb96
-rw-r--r--lib/gitlab/bare_repository_importer.rb96
-rw-r--r--lib/gitlab/project_repo_path.rb28
-rw-r--r--lib/tasks/gitlab/import.rake2
-rw-r--r--spec/lib/gitlab/bare_repository_import/bare_repository_spec.rb (renamed from spec/lib/gitlab/project_repo_path_spec.rb)2
-rw-r--r--spec/lib/gitlab/bare_repository_import/importer_spec.rb (renamed from spec/lib/gitlab/bare_repository_importer_spec.rb)6
7 files changed, 131 insertions, 129 deletions
diff --git a/lib/gitlab/bare_repository_import/bare_repository.rb b/lib/gitlab/bare_repository_import/bare_repository.rb
new file mode 100644
index 00000000000..edaba157b18
--- /dev/null
+++ b/lib/gitlab/bare_repository_import/bare_repository.rb
@@ -0,0 +1,30 @@
+module Gitlab
+ module BareRepositoryImport
+ class BareRepository
+ attr_reader :group_path, :project_name, :repo_path
+
+ def initialize(root_path, repo_path)
+ @root_path = root_path
+ @repo_path = repo_path
+
+ # Split path into 'all/the/namespaces' and 'project_name'
+ @group_path, _sep, @project_name = repo_relative_path.rpartition('/')
+ end
+
+ def wiki?
+ @wiki ||= @repo_path.end_with?('.wiki.git')
+ end
+
+ def project_full_path
+ @project_full_path ||= "#{group_path}/#{project_name}"
+ end
+
+ private
+
+ def repo_relative_path
+ # Remove root path and `.git` at the end
+ repo_path.sub(/\A#{@root_path}/, '').sub(/\.git$/, '')
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/bare_repository_import/importer.rb b/lib/gitlab/bare_repository_import/importer.rb
new file mode 100644
index 00000000000..43795965801
--- /dev/null
+++ b/lib/gitlab/bare_repository_import/importer.rb
@@ -0,0 +1,96 @@
+module Gitlab
+ module BareRepositoryImport
+ class Importer
+ include Gitlab::ShellAdapter
+
+ NoAdminError = Class.new(StandardError)
+
+ def self.execute(import_path)
+ import_path << '/' unless import_path.ends_with?('/')
+ repos_to_import = Dir.glob(import_path + '/**/*.git')
+
+ repos_to_import.each do |repo_path|
+ bare_repo = Gitlab::BareRepositoryImport::BareRepository.new(import_path, repo_path)
+
+ if bare_repo.wiki?
+ log " * Skipping wiki repo"
+
+ next
+ end
+
+ log "Processing #{repo_path}".color(:yellow)
+
+ new(bare_repo).create_project_if_needed
+ end
+ end
+
+ attr_reader :storage_name, :user, :project_name, :bare_repo
+
+ delegate :log, to: :class
+ delegate :project_name, :project_full_path, :group_path, :repo_path, to: :bare_repo
+
+ def initialize(bare_repo)
+ unless @user = User.admins.order_id_asc.first
+ raise NoAdminError.new('No admin user found to import repositories')
+ end
+
+ @bare_repo = bare_repo
+ end
+
+ def create_project_if_needed
+ if project = Project.find_by_full_path(project_full_path)
+ log " * #{project.name} (#{project_full_path}) exists"
+
+ return project
+ end
+
+ create_project
+ end
+
+ private
+
+ def create_project
+ group = find_or_create_groups
+
+ project = Projects::CreateService.new(user,
+ name: project_name,
+ path: project_name,
+ skip_disk_validation: true,
+ import_type: 'gitlab_project',
+ namespace_id: group&.id).execute
+
+ if project.persisted? && import_repo(project)
+
+ log " * Created #{project.name} (#{project_full_path})".color(:green)
+
+ ProjectCacheWorker.perform_async(project.id)
+ else
+ log " * Failed trying to create #{project.name} (#{project_full_path})".color(:red)
+ log " Errors: #{project.errors.messages}".color(:red)
+ end
+
+ project
+ end
+
+ def import_repo(project)
+ gitlab_shell.import_repository(project.repository_storage_path, project.disk_path, repo_path)
+ end
+
+ def find_or_create_groups
+ return nil unless group_path.present?
+
+ log " * Using namespace: #{group_path}"
+
+ Groups::NestedCreateService.new(user, group_path: group_path).execute
+ end
+
+ # This is called from within a rake task only used by Admins, so allow writing
+ # to STDOUT
+ #
+ # rubocop:disable Rails/Output
+ def self.log(message)
+ puts message
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/bare_repository_importer.rb b/lib/gitlab/bare_repository_importer.rb
deleted file mode 100644
index 31d7ac46621..00000000000
--- a/lib/gitlab/bare_repository_importer.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-module Gitlab
- class BareRepositoryImporter
- include Gitlab::ShellAdapter
-
- NoAdminError = Class.new(StandardError)
-
- def self.execute(import_path)
- import_path << '/' unless import_path.ends_with?('/')
- repos_to_import = Dir.glob(import_path + '/**/*.git')
-
- repos_to_import.each do |repo_path|
- project_repo_path = Gitlab::ProjectRepoPath.new(import_path, repo_path)
-
- if project_repo_path.wiki?
- log " * Skipping wiki repo"
-
- next
- end
-
- log "Processing #{repo_path}".color(:yellow)
-
- new(project_repo_path).create_project_if_needed
- end
- end
-
- attr_reader :storage_name, :user, :project_name
- delegate :log, to: :class
-
- def initialize(project_repo_path)
- unless @user = User.admins.order_id_asc.first
- raise NoAdminError.new('No admin user found to import repositories')
- end
-
- @project_repo_path = project_repo_path
- @project_name = project_repo_path.project_name
- end
-
- def create_project_if_needed
- if project = Project.find_by_full_path(@project_repo_path.project_full_path)
- log " * #{project.name} (#{@project_repo_path.project_full_path}) exists"
-
- return project
- end
-
- create_project
- end
-
- private
-
- def create_project
- group = find_or_create_groups
-
- project = Projects::CreateService.new(user,
- name: project_name,
- path: project_name,
- skip_disk_validation: true,
- import_type: 'gitlab_project',
- namespace_id: group&.id).execute
-
- if project.persisted? && import_repo(project)
-
- log " * Created #{project.name} (#{@project_repo_path.project_full_path})".color(:green)
-
- ProjectCacheWorker.perform_async(project.id)
- else
- log " * Failed trying to create #{project.name} (#{@project_repo_path.project_full_path})".color(:red)
- log " Errors: #{project.errors.messages}".color(:red)
- end
-
- project
- end
-
- def import_repo(project)
- gitlab_shell.import_repository(project.repository_storage_path, project.disk_path, @project_repo_path.repo_path)
- end
-
- def find_or_create_groups
- group_path = @project_repo_path.group_path
-
- return nil unless group_path.present?
-
- log " * Using namespace: #{group_path}"
-
- Groups::NestedCreateService.new(user, group_path: group_path).execute
- end
-
- # This is called from within a rake task only used by Admins, so allow writing
- # to STDOUT
- #
- # rubocop:disable Rails/Output
- def self.log(message)
- puts message
- end
- # rubocop:enable Rails/Output
- end
-end
diff --git a/lib/gitlab/project_repo_path.rb b/lib/gitlab/project_repo_path.rb
deleted file mode 100644
index 4e5c8a1d790..00000000000
--- a/lib/gitlab/project_repo_path.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-module Gitlab
- class ProjectRepoPath
- attr_reader :group_path, :project_name, :repo_path
-
- def initialize(root_path, repo_path)
- @root_path = root_path
- @repo_path = repo_path
-
- # Split path into 'all/the/namespaces' and 'project_name'
- @group_path, _sep, @project_name = repo_relative_path.rpartition('/')
- end
-
- def wiki?
- @wiki ||= @repo_path.end_with?('.wiki.git')
- end
-
- def project_full_path
- @project_full_path ||= "#{group_path}/#{project_name}"
- end
-
- private
-
- def repo_relative_path
- # Remove root path and `.git` at the end
- repo_path.sub(/\A#{@root_path}/, '').sub(/\.git$/, '')
- end
- end
-end
diff --git a/lib/tasks/gitlab/import.rake b/lib/tasks/gitlab/import.rake
index c7531787b76..adfcc3cda22 100644
--- a/lib/tasks/gitlab/import.rake
+++ b/lib/tasks/gitlab/import.rake
@@ -16,7 +16,7 @@ namespace :gitlab do
exit 1
end
- Gitlab::BareRepositoryImporter.execute(args.import_path)
+ Gitlab::BareRepositoryImport::Importer.execute(args.import_path)
end
end
end
diff --git a/spec/lib/gitlab/project_repo_path_spec.rb b/spec/lib/gitlab/bare_repository_import/bare_repository_spec.rb
index 65061af54ef..1bbbb64a8c7 100644
--- a/spec/lib/gitlab/project_repo_path_spec.rb
+++ b/spec/lib/gitlab/bare_repository_import/bare_repository_spec.rb
@@ -1,6 +1,6 @@
require 'spec_helper'
-describe ::Gitlab::ProjectRepoPath do
+describe ::Gitlab::BareRepositoryImport::BareRepository do
let(:project_repo_path) { described_class.new('/full/path/', '/full/path/to/repo.git') }
it 'stores the repo path' do
diff --git a/spec/lib/gitlab/bare_repository_importer_spec.rb b/spec/lib/gitlab/bare_repository_import/importer_spec.rb
index 7ed79e3e8a1..f4dd36f6080 100644
--- a/spec/lib/gitlab/bare_repository_importer_spec.rb
+++ b/spec/lib/gitlab/bare_repository_import/importer_spec.rb
@@ -1,8 +1,8 @@
require 'spec_helper'
-describe Gitlab::BareRepositoryImporter, repository: true do
+describe Gitlab::BareRepositoryImport::Importer, repository: true do
let!(:admin) { create(:admin) }
- let(:project_repo_path) { Gitlab::ProjectRepoPath.new(TestEnv.repos_path, File.join(TestEnv.repos_path, "#{project_path}.git")) }
+ let(:project_repo_path) { Gitlab::BareRepositoryImport::BareRepository.new(TestEnv.repos_path, File.join(TestEnv.repos_path, "#{project_path}.git")) }
subject(:importer) { described_class.new(project_repo_path) }
@@ -38,7 +38,7 @@ describe Gitlab::BareRepositoryImporter, repository: true do
let(:admin) { nil }
it 'raises an error' do
- expect { importer }.to raise_error(Gitlab::BareRepositoryImporter::NoAdminError)
+ expect { importer }.to raise_error(Gitlab::BareRepositoryImport::Importer::NoAdminError)
end
end
end