Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-03-06 21:08:08 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-03-06 21:08:08 +0300
commit83731155d997ae24c7e0cd5ffa6f0dba41bec6dc (patch)
tree31f785012137fda4ac9a470f4f07c961b42d0299 /lib/gitlab/import_export
parent57a37ce99f297cddae12cb4d982b6d572f932bb4 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/import_export')
-rw-r--r--lib/gitlab/import_export/importer.rb8
-rw-r--r--lib/gitlab/import_export/snippet_repo_restorer.rb48
-rw-r--r--lib/gitlab/import_export/snippet_repo_saver.rb21
-rw-r--r--lib/gitlab/import_export/snippets_repo_restorer.rb36
-rw-r--r--lib/gitlab/import_export/snippets_repo_saver.rb34
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