debian-mirror-gitlab/lib/gitlab/import_export/snippet_repo_restorer.rb

60 lines
1.6 KiB
Ruby
Raw Normal View History

2020-04-08 14:13:33 +05:30
# frozen_string_literal: true
module Gitlab
module ImportExport
class SnippetRepoRestorer < RepoRestorer
2020-07-02 01:45:43 +05:30
attr_reader :snippet, :user
2020-04-08 14:13:33 +05:30
2020-06-23 00:09:42 +05:30
SnippetRepositoryError = Class.new(StandardError)
2020-04-08 14:13:33 +05:30
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
2021-06-08 01:23:25 +05:30
rescue StandardError => e
2020-04-08 14:13:33 +05:30
shared.error(e)
false
end
private
def create_repository_from_bundle
repository.create_from_bundle(path_to_bundle)
2020-04-22 19:07:51 +05:30
snippet.track_snippet_repository(repository.storage)
2020-07-02 01:45:43 +05:30
response = Snippets::RepositoryValidationService.new(user, snippet).execute
if response.error?
repository.remove
snippet.snippet_repository.delete
snippet.repository.expire_exists_cache
raise SnippetRepositoryError, _("Invalid repository bundle for snippet with id %{snippet_id}") % { snippet_id: snippet.id }
2020-07-28 23:09:34 +05:30
else
Snippets::UpdateStatisticsService.new(snippet).execute
2020-07-02 01:45:43 +05:30
end
2020-04-08 14:13:33 +05:30
end
def create_repository_from_db
2020-06-23 00:09:42 +05:30
Gitlab::BackgroundMigration::BackfillSnippetRepositories.new.perform_by_ids([snippet.id])
2020-04-08 14:13:33 +05:30
2020-06-23 00:09:42 +05:30
unless snippet.reset.snippet_repository
raise SnippetRepositoryError, _("Error creating repository for snippet with id %{snippet_id}") % { snippet_id: snippet.id }
end
2020-04-08 14:13:33 +05:30
end
end
end
end