diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-06 21:08:08 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-06 21:08:08 +0300 |
commit | 83731155d997ae24c7e0cd5ffa6f0dba41bec6dc (patch) | |
tree | 31f785012137fda4ac9a470f4f07c961b42d0299 /lib/gitlab/import_export | |
parent | 57a37ce99f297cddae12cb4d982b6d572f932bb4 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/import_export')
-rw-r--r-- | lib/gitlab/import_export/importer.rb | 8 | ||||
-rw-r--r-- | lib/gitlab/import_export/snippet_repo_restorer.rb | 48 | ||||
-rw-r--r-- | lib/gitlab/import_export/snippet_repo_saver.rb | 21 | ||||
-rw-r--r-- | lib/gitlab/import_export/snippets_repo_restorer.rb | 36 | ||||
-rw-r--r-- | lib/gitlab/import_export/snippets_repo_saver.rb | 34 |
5 files changed, 146 insertions, 1 deletions
diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb index 4eeecc14067..4b761eb86ae 100644 --- a/lib/gitlab/import_export/importer.rb +++ b/lib/gitlab/import_export/importer.rb @@ -35,7 +35,7 @@ module Gitlab def restorers [repo_restorer, wiki_restorer, project_tree, avatar_restorer, - uploads_restorer, lfs_restorer, statistics_restorer] + uploads_restorer, lfs_restorer, statistics_restorer, snippets_repo_restorer] end def import_file @@ -79,6 +79,12 @@ module Gitlab Gitlab::ImportExport::LfsRestorer.new(project: project, shared: shared) end + def snippets_repo_restorer + Gitlab::ImportExport::SnippetsRepoRestorer.new(project: project, + shared: shared, + user: current_user) + end + def statistics_restorer Gitlab::ImportExport::StatisticsRestorer.new(project: project, shared: shared) end diff --git a/lib/gitlab/import_export/snippet_repo_restorer.rb b/lib/gitlab/import_export/snippet_repo_restorer.rb new file mode 100644 index 00000000000..079681dfac5 --- /dev/null +++ b/lib/gitlab/import_export/snippet_repo_restorer.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module Gitlab + module ImportExport + class SnippetRepoRestorer < RepoRestorer + attr_reader :snippet + + def initialize(snippet:, user:, shared:, path_to_bundle:) + @snippet = snippet + @user = user + @repository = snippet.repository + @path_to_bundle = path_to_bundle.to_s + @shared = shared + end + + def restore + if File.exist?(path_to_bundle) + create_repository_from_bundle + else + create_repository_from_db + end + + true + rescue => e + shared.error(e) + false + end + + private + + def create_repository_from_bundle + repository.create_from_bundle(path_to_bundle) + snippet.track_snippet_repository + end + + def create_repository_from_db + snippet.create_repository + + commit_attrs = { + branch_name: 'master', + message: 'Initial commit' + } + + repository.create_file(@user, snippet.file_name, snippet.content, commit_attrs) + end + end + end +end diff --git a/lib/gitlab/import_export/snippet_repo_saver.rb b/lib/gitlab/import_export/snippet_repo_saver.rb new file mode 100644 index 00000000000..cab96c78232 --- /dev/null +++ b/lib/gitlab/import_export/snippet_repo_saver.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Gitlab + module ImportExport + class SnippetRepoSaver < RepoSaver + def initialize(project:, shared:, repository:) + @project = project + @shared = shared + @repository = repository + end + + private + + def bundle_full_path + File.join(shared.export_path, + ::Gitlab::ImportExport.snippet_repo_bundle_dir, + ::Gitlab::ImportExport.snippet_repo_bundle_filename_for(repository.container)) + end + end + end +end diff --git a/lib/gitlab/import_export/snippets_repo_restorer.rb b/lib/gitlab/import_export/snippets_repo_restorer.rb new file mode 100644 index 00000000000..8fe83225812 --- /dev/null +++ b/lib/gitlab/import_export/snippets_repo_restorer.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module Gitlab + module ImportExport + class SnippetsRepoRestorer + def initialize(project:, shared:, user:) + @project = project + @shared = shared + @user = user + end + + def restore + return true unless Feature.enabled?(:version_snippets, @user) + return true unless Dir.exist?(snippets_repo_bundle_path) + + @project.snippets.find_each.all? do |snippet| + Gitlab::ImportExport::SnippetRepoRestorer.new(snippet: snippet, + user: @user, + shared: @shared, + path_to_bundle: snippet_repo_bundle_path(snippet)) + .restore + end + end + + private + + def snippet_repo_bundle_path(snippet) + File.join(snippets_repo_bundle_path, ::Gitlab::ImportExport.snippet_repo_bundle_filename_for(snippet)) + end + + def snippets_repo_bundle_path + @snippets_repo_bundle_path ||= ::Gitlab::ImportExport.snippets_repo_bundle_path(@shared.export_path) + end + end + end +end diff --git a/lib/gitlab/import_export/snippets_repo_saver.rb b/lib/gitlab/import_export/snippets_repo_saver.rb new file mode 100644 index 00000000000..85e094c0d15 --- /dev/null +++ b/lib/gitlab/import_export/snippets_repo_saver.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module Gitlab + module ImportExport + class SnippetsRepoSaver + include Gitlab::ImportExport::CommandLineUtil + + def initialize(current_user:, project:, shared:) + @project = project + @shared = shared + @current_user = current_user + end + + def save + return true unless Feature.enabled?(:version_snippets, @current_user) + + create_snippets_repo_directory + + @project.snippets.find_each.all? do |snippet| + Gitlab::ImportExport::SnippetRepoSaver.new(project: @project, + shared: @shared, + repository: snippet.repository) + .save + end + end + + private + + def create_snippets_repo_directory + mkdir_p(::Gitlab::ImportExport.snippets_repo_bundle_path(@shared.export_path)) + end + end + end +end |