WIP - importing file and repo

This commit is contained in:
James Lopez 2016-04-15 18:14:28 +02:00
parent 97c3aff16f
commit ae777ea061
4 changed files with 80 additions and 2 deletions

View file

@ -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

View file

@ -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

View 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

View 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