WIP - importing file and repo
This commit is contained in:
parent
97c3aff16f
commit
ae777ea061
4 changed files with 80 additions and 2 deletions
|
@ -2,17 +2,24 @@ module Projects
|
|||
module ImportExport
|
||||
class ExportService < BaseService
|
||||
def execute(options = {})
|
||||
|
||||
@import_path = options[:import_path]
|
||||
restore_project_tree
|
||||
restore_repo(project_tree.project)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def restore_project_tree
|
||||
Gitlab::ImportExport::ProjectTreeRestorer.new(path: @import_path).restore
|
||||
project_tree.restore
|
||||
end
|
||||
|
||||
def restore_repo
|
||||
def project_tree
|
||||
@project_tree ||= Gitlab::ImportExport::ProjectTreeRestorer.new(path: @import_path, user: @current_user)
|
||||
end
|
||||
|
||||
def restore_repo(project)
|
||||
Gitlab::ImportExport::RepoRestorer.new(path: @import_path, project: project).restore
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -5,6 +5,14 @@ module Gitlab
|
|||
tar_with_options(archive: archive, dir: dir, options: 'cf')
|
||||
end
|
||||
|
||||
def untar_czf(archive:, dir:)
|
||||
untar_with_options(archive: archive, dir: dir, options: 'czf')
|
||||
end
|
||||
|
||||
def untar_cf(archive:, dir:)
|
||||
untar_with_options(archive: archive, dir: dir, options: 'cf')
|
||||
end
|
||||
|
||||
def tar_czf(archive:, dir:)
|
||||
tar_with_options(archive: archive, dir: dir, options: 'czf')
|
||||
end
|
||||
|
@ -20,6 +28,12 @@ module Gitlab
|
|||
_output, status = Gitlab::Popen.popen(cmd)
|
||||
status.zero?
|
||||
end
|
||||
|
||||
def untar_with_options(archive:, dir:, options:)
|
||||
cmd = %W(tar -#{options} #{archive)} -C #{dir})
|
||||
_output, status = Gitlab::Popen.popen(cmd)
|
||||
status.zero?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
26
lib/gitlab/import_export/importer.rb
Normal file
26
lib/gitlab/import_export/importer.rb
Normal file
|
@ -0,0 +1,26 @@
|
|||
module Gitlab
|
||||
module ImportExport
|
||||
class Importer
|
||||
include Gitlab::ImportExport::CommandLineUtil
|
||||
|
||||
def self.import(*args)
|
||||
new(*args).import
|
||||
end
|
||||
|
||||
def initialize(archive_file:, storage_path:)
|
||||
@archive_file = archive_file
|
||||
@storage_path = storage_path
|
||||
end
|
||||
|
||||
def import
|
||||
decompress_export
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def decompress
|
||||
untar_czf(archive: archive_file, dir: @storage_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
31
lib/gitlab/import_export/repo_restorer.rb
Normal file
31
lib/gitlab/import_export/repo_restorer.rb
Normal file
|
@ -0,0 +1,31 @@
|
|||
module Gitlab
|
||||
module ImportExport
|
||||
class RepoRestorer
|
||||
include Gitlab::ImportExport::CommandLineUtil
|
||||
|
||||
def initialize(project: , path: )
|
||||
@project = project
|
||||
@path = path
|
||||
end
|
||||
|
||||
def restore
|
||||
return false unless File.exists?(@path)
|
||||
# Move repos dir to 'repositories.old' dir
|
||||
|
||||
FileUtils.mkdir_p(repos_path)
|
||||
FileUtils.mkdir_p(path_to_repo)
|
||||
untar_cf(archive: @path, dir: path_to_repo)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def repos_path
|
||||
Gitlab.config.gitlab_shell.repos_path
|
||||
end
|
||||
|
||||
def path_to_repo
|
||||
@project.repository.path_to_repo
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue