summaryrefslogtreecommitdiff
path: root/app/services
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-04-14 16:57:25 +0200
committerJames Lopez <james@jameslopez.es>2016-04-14 16:57:25 +0200
commit0852f539aa389c66ef377b7d567c931f928e147f (patch)
tree82797f5e855f9235d445c943af7161b4cc7d2238 /app/services
parent91ffd8028977984d3ea9a741a3a655ff6dae76b2 (diff)
downloadgitlab-ce-0852f539aa389c66ef377b7d567c931f928e147f.tar.gz
refactored stuff, added a save and compress all class and moved mostly everything to lib
Diffstat (limited to 'app/services')
-rw-r--r--app/services/projects/import_export.rb23
-rw-r--r--app/services/projects/import_export/command_line_util.rb17
-rw-r--r--app/services/projects/import_export/export_service.rb11
-rw-r--r--app/services/projects/import_export/import_export.yml37
-rw-r--r--app/services/projects/import_export/import_export_reader.rb91
-rw-r--r--app/services/projects/import_export/project_tree_saver.rb37
-rw-r--r--app/services/projects/import_export/repo_bundler.rb38
-rw-r--r--app/services/projects/import_export/shared.rb13
-rw-r--r--app/services/projects/import_export/wiki_repo_bundler.rb34
9 files changed, 8 insertions, 293 deletions
diff --git a/app/services/projects/import_export.rb b/app/services/projects/import_export.rb
deleted file mode 100644
index c74f1d31490..00000000000
--- a/app/services/projects/import_export.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-module Projects
- module ImportExport
- extend self
-
- def export_path(relative_path:)
- File.join(storage_path, "#{Time.now.strftime('%Y-%m-%d_%H-%M-%3N')}_gitlab_export/#{relative_path}")
- end
-
- def project_atts
- %i(name path description issues_enabled wall_enabled merge_requests_enabled wiki_enabled snippets_enabled visibility_level archived)
- end
-
- def project_tree
- Projects::ImportExport::ImportExportReader.project_tree
- end
-
- private
-
- def storage_path
- File.join(Settings.shared['path'], 'tmp/project_exports')
- end
- end
-end
diff --git a/app/services/projects/import_export/command_line_util.rb b/app/services/projects/import_export/command_line_util.rb
deleted file mode 100644
index 3ca49e76c7f..00000000000
--- a/app/services/projects/import_export/command_line_util.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-module Projects
- module ImportExport
- module CommandLineUtil
- def tar_cf(archive:, dir:)
- cmd = %W(tar -cf #{archive} -C #{dir} .)
- _output, status = Gitlab::Popen.popen(cmd)
- status.zero?
- end
-
- def git_bundle(git_bin_path: Gitlab.config.git.bin_path, repo_path:, bundle_path:)
- cmd = %W(#{git_bin_path} --git-dir=#{repo_path} bundle create #{bundle_path} --all)
- _output, status = Gitlab::Popen.popen(cmd)
- status.zero?
- end
- end
- end
-end
diff --git a/app/services/projects/import_export/export_service.rb b/app/services/projects/import_export/export_service.rb
index 99aa8489f65..ce13942c5d7 100644
--- a/app/services/projects/import_export/export_service.rb
+++ b/app/services/projects/import_export/export_service.rb
@@ -2,19 +2,24 @@ module Projects
module ImportExport
class ExportService < BaseService
def execute(options = {})
- @shared = Projects::ImportExport::Shared.new(relative_path: project.path_with_namespace)
+ @shared = Gitlab::ImportExport::Shared.new(relative_path: project.path_with_namespace)
save_project_tree
bundle_repo
+ save_all
end
private
def save_project_tree
- Projects::ImportExport::ProjectTreeSaver.new(project: project, shared: @shared).save
+ Gitlab::ImportExport::ProjectTreeSaver.new(project: project, shared: @shared).save
end
def bundle_repo
- Projects::ImportExport::RepoBundler.new(project: project, shared: @shared).bundle
+ Gitlab::ImportExport::RepoBundler.new(project: project, shared: @shared).bundle
+ end
+
+ def save_all
+ Gitlab::ImportExport::Saver.save(storage_path: @shared.export_path)
end
end
end
diff --git a/app/services/projects/import_export/import_export.yml b/app/services/projects/import_export/import_export.yml
deleted file mode 100644
index 92f492e9013..00000000000
--- a/app/services/projects/import_export/import_export.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-# Class relationships to be included in the project import/export
-:project_tree:
- - :issues:
- - :notes
- - :labels
- - :milestones
- - :snippets
- - :releases
- - :events
- - :project_members:
- - :user
- - :merge_requests:
- - :merge_request_diff
- - :notes
- - :ci_commits:
- - :statuses
-
-:attributes_only:
- :project:
- - :name
- - :path
- - :description
- - :issues_enabled
- - :wall_enabled
- - :merge_requests_enabled
- - :wiki_enabled
- - :snippets_enabled
- - :visibility_level
- - :archived
- :user:
- - :id
- - :email
- - :username
-
-:attributes_except:
- :snippets:
- - :expired_at \ No newline at end of file
diff --git a/app/services/projects/import_export/import_export_reader.rb b/app/services/projects/import_export/import_export_reader.rb
deleted file mode 100644
index 001d24af604..00000000000
--- a/app/services/projects/import_export/import_export_reader.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-module Projects
- module ImportExport
- module ImportExportReader
- extend self
-
- def project_tree
- { only: atts_only[:project], include: build_hash(tree) }
- end
-
- def tree
- config[:project_tree]
- end
-
- private
-
- def config
- @config ||= YAML.load_file('app/services/projects/import_export/import_export.yml')
- end
-
- def atts_only
- config[:attributes_only]
- end
-
- def atts_except
- config[:attributes_except]
- end
-
- def build_hash(array)
- array.map do |el|
- if el.is_a?(Hash)
- process_include(el)
- else
- only_except_hash = check_only_and_except(el)
- only_except_hash.empty? ? el : { el => only_except_hash }
- end
- end
- end
-
- def process_include(hash, included_classes_hash = {})
- hash.values.flatten.each do |value|
- current_key = hash.keys.first
- value = process_current_class(hash, included_classes_hash, value)
- if included_classes_hash[current_key]
- add_class(current_key, included_classes_hash, value)
- else
- add_new_class(current_key, included_classes_hash, value)
- end
- end
- included_classes_hash
- end
-
- def process_current_class(hash, included_classes_hash, value)
- value = value.is_a?(Hash) ? process_include(hash, included_classes_hash) : value
- only_except_hash = check_only_and_except(hash.keys.first)
- included_classes_hash[hash.keys.first] ||= only_except_hash unless only_except_hash.empty?
- value
- end
-
- def add_new_class(current_key, included_classes_hash, value)
- new_hash = { include: value }
- new_hash.merge!(check_only_and_except(value))
- included_classes_hash[current_key] = new_hash
- end
-
- def add_class(current_key, included_classes_hash, value)
- only_except_hash = check_only_and_except(value)
- value = { value => only_except_hash } unless only_except_hash.empty?
- old_values = included_classes_hash[current_key][:include]
- included_classes_hash[current_key][:include] = ([old_values] + [value]).compact.flatten
- end
-
- def check_only_and_except(value)
- check_only(value).merge(check_except(value))
- end
-
- def check_only(value)
- key = key_from_hash(value)
- atts_only[key].nil? ? {} : { only: atts_only[key] }
- end
-
- def check_except(value)
- key = key_from_hash(value)
- atts_except[key].nil? ? {} : { except: atts_except[key] }
- end
-
- def key_from_hash(value)
- value.is_a?(Hash) ? value.keys.first : value
- end
- end
- end
-end
diff --git a/app/services/projects/import_export/project_tree_saver.rb b/app/services/projects/import_export/project_tree_saver.rb
deleted file mode 100644
index 37bf3e8e545..00000000000
--- a/app/services/projects/import_export/project_tree_saver.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Projects
- module ImportExport
- class ProjectTreeSaver
- attr_reader :full_path
-
- def initialize(project: , shared: )
- @project = project
- @export_path = shared.export_path
- end
-
- def save
- @full_path = File.join(@export_path, project_filename)
- save_to_disk
- end
-
- private
-
- def save_to_disk
- FileUtils.mkdir_p(@export_path)
- File.write(full_path, project_json_tree)
- true
- rescue
- # TODO: handle error
- false
- end
-
- def project_filename
- # TODO sanitize name
- "#{@project.name}.json"
- end
-
- def project_json_tree
- @project.to_json(Projects::ImportExport.project_tree)
- end
- end
- end
-end
diff --git a/app/services/projects/import_export/repo_bundler.rb b/app/services/projects/import_export/repo_bundler.rb
deleted file mode 100644
index d43fb4ea09e..00000000000
--- a/app/services/projects/import_export/repo_bundler.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-module Projects
- module ImportExport
- class RepoBundler
- include Projects::ImportExport::CommandLineUtil
-
- attr_reader :full_path
-
- def initialize(project: , shared: )
- @project = project
- @export_path = shared.export_path
- end
-
- def bundle
- return false if @project.empty_repo?
- @full_path = File.join(@export_path, project_filename)
- bundle_to_disk
- end
-
- private
-
- def bundle_to_disk
- FileUtils.mkdir_p(@export_path)
- tar_cf(archive: full_path, dir: path_to_repo)
- rescue
- #TODO: handle error
- false
- end
-
- def project_filename
- "#{@project.name}.bundle"
- end
-
- def path_to_repo
- @project.repository.path_to_repo
- end
- end
- end
-end
diff --git a/app/services/projects/import_export/shared.rb b/app/services/projects/import_export/shared.rb
deleted file mode 100644
index 04fe01c0d6c..00000000000
--- a/app/services/projects/import_export/shared.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-module Projects
- module ImportExport
- class Shared
- def initialize(opts)
- @opts = opts
- end
-
- def export_path
- @export_path ||= Projects::ImportExport.export_path(relative_path: @opts[:relative_path])
- end
- end
- end
-end
diff --git a/app/services/projects/import_export/wiki_repo_bundler.rb b/app/services/projects/import_export/wiki_repo_bundler.rb
deleted file mode 100644
index bf69936503d..00000000000
--- a/app/services/projects/import_export/wiki_repo_bundler.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-module Projects
- module ImportExport
- class WikiRepoBundler < RepoBundler
- def bundle
- @wiki = ProjectWiki.new(@project)
- return false if !wiki?
- @full_path = File.join(@export_path, project_filename)
- bundle_to_disk
- end
-
- def bundle_to_disk
- FileUtils.mkdir_p(@export_path)
- git_bundle(repo_path: path_to_repo, bundle_path: @full_path)
- rescue
- #TODO: handle error
- false
- end
-
- private
-
- def project_filename
- "#{@project.name}.wiki.bundle"
- end
-
- def path_to_repo
- @wiki.repository.path_to_repo
- end
-
- def wiki?
- File.exists?(@wiki.repository.path_to_repo) && !@wiki.repository.empty?
- end
- end
- end
-end