adding notifications stuff and more refactoring for exporting projects
This commit is contained in:
parent
fe370b1c39
commit
9ecebaaea1
|
@ -12,7 +12,7 @@ class Import::GitlabProjectsController < Import::BaseController
|
|||
return redirect_back_or_default(options: { alert: "You need to upload a GitLab project export archive." })
|
||||
end
|
||||
|
||||
@project = Gitlab::GitlabImport::ProjectCreator.new(Namespace.find(project_params[:namespace_id]),
|
||||
@project = Gitlab::ImportExport::ProjectCreator.new(Namespace.find(project_params[:namespace_id]),
|
||||
current_user,
|
||||
File.expand_path(params[:file].path),
|
||||
project_params[:path]).execute
|
||||
|
|
|
@ -190,7 +190,7 @@ class ProjectsController < Projects::ApplicationController
|
|||
|
||||
redirect_to(
|
||||
edit_project_path(@project),
|
||||
notice: "Project export successfully started."
|
||||
notice: "Project export started."
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -50,6 +50,19 @@ module Emails
|
|||
subject: subject("Invitation declined"))
|
||||
end
|
||||
|
||||
def project_was_exported_email(current_user, project)
|
||||
@project = project
|
||||
mail(to: current_user.notification_email,
|
||||
subject: subject("Project was exported"))
|
||||
end
|
||||
|
||||
def project_was_not_exported_email(current_user, project, errors)
|
||||
@project = project
|
||||
@errors = errors
|
||||
mail(to: current_user.notification_email,
|
||||
subject: subject("Project export error"))
|
||||
end
|
||||
|
||||
def project_was_moved_email(project_id, user_id, old_path_with_namespace)
|
||||
@current_user = @user = User.find user_id
|
||||
@project = Project.find project_id
|
||||
|
|
|
@ -246,6 +246,14 @@ class NotificationService
|
|||
end
|
||||
end
|
||||
|
||||
def project_exported(project, current_user)
|
||||
mailer.project_was_exported_email(current_user, project).deliver_later
|
||||
end
|
||||
|
||||
def project_not_exported(project, current_user, errors)
|
||||
mailer.project_was_not_exported_email(current_user, project, errors).deliver_later
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
# Get project users with WATCH notification level
|
||||
|
|
|
@ -52,8 +52,6 @@ module Projects
|
|||
|
||||
save_project_and_import_data(import_data)
|
||||
|
||||
@project.import_url = download_export_namespace_project_path(@project.namespace, @project) if @project.gitlab_project_import?
|
||||
|
||||
@project.import_start if @project.import?
|
||||
|
||||
after_create_actions if @project.persisted? && !@project.gitlab_project_import?
|
||||
|
|
|
@ -12,8 +12,9 @@ module Projects
|
|||
def save_all
|
||||
if [version_saver, project_tree_saver, uploads_saver, repo_saver, wiki_repo_saver].all?(&:save)
|
||||
Gitlab::ImportExport::Saver.save(shared: @shared)
|
||||
notify_success
|
||||
else
|
||||
cleanup_and_notify_worker
|
||||
cleanup_and_notify
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -37,10 +38,20 @@ module Projects
|
|||
Gitlab::ImportExport::WikiRepoSaver.new(project: project, shared: @shared)
|
||||
end
|
||||
|
||||
def cleanup_and_notify_worker
|
||||
def cleanup_and_notify
|
||||
FileUtils.rm_rf(@shared.export_path)
|
||||
|
||||
notify_error
|
||||
raise Gitlab::ImportExport::Error.new(@shared.errors.join(', '))
|
||||
end
|
||||
|
||||
def notify_success
|
||||
notification_service.project_exported(@project, @current_user)
|
||||
end
|
||||
|
||||
def notify_error
|
||||
notification_service.project_not_exported(@project, @current_user, @shared.errors.join(', '))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
%p
|
||||
Project #{@project.name} was exported succesfully
|
||||
%p
|
||||
The project export can be downloaded from:
|
||||
= link_to download_export_namespace_project_url(@project.namespace, @project) do
|
||||
= @project.name_with_namespace + " export"
|
||||
%p
|
||||
The download link will expire in 24 hours.
|
|
@ -0,0 +1,6 @@
|
|||
Project <%= @project.name %> was exported succesfully
|
||||
|
||||
The project export can be downloaded from:
|
||||
<%= download_export_namespace_project_url(@project.namespace, @project) %>
|
||||
|
||||
The download link will expire in 24 hours.
|
|
@ -0,0 +1,7 @@
|
|||
%p
|
||||
Project #{@project.name} couldn't be exported.
|
||||
%p
|
||||
The errors we encountered were:
|
||||
|
||||
%h3{style: "background: black; color: red;"}
|
||||
#{@errors}
|
|
@ -0,0 +1,5 @@
|
|||
Project <%= @project.name %> couldn't be exported.
|
||||
|
||||
The errors we encountered were:
|
||||
|
||||
<%= @errors %>
|
|
@ -7,6 +7,7 @@ class ProjectExportWorker
|
|||
def perform(current_user_id, project_id)
|
||||
current_user = User.find(current_user_id)
|
||||
project = Project.find(project_id)
|
||||
|
||||
::Projects::ImportExport::ExportService.new(project, current_user).execute
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,21 +3,24 @@ module Gitlab
|
|||
class ProjectCreator
|
||||
attr_reader :repo, :namespace, :current_user, :session_data
|
||||
|
||||
def initialize(namespace_id, current_user, file, project_path)
|
||||
@namespace_id = namespace_id
|
||||
def initialize(repo, namespace, current_user, session_data)
|
||||
@repo = repo
|
||||
@namespace = namespace
|
||||
@current_user = current_user
|
||||
@file = file
|
||||
@project_path = project_path
|
||||
@session_data = session_data
|
||||
end
|
||||
|
||||
def execute
|
||||
::Projects::CreateService.new(
|
||||
current_user,
|
||||
name: @project_path,
|
||||
path: @project_path,
|
||||
namespace_id: namespace_id,
|
||||
import_type: "gitlab_project",
|
||||
import_source: @file
|
||||
name: repo["name"],
|
||||
path: repo["path"],
|
||||
description: repo["description"],
|
||||
namespace_id: namespace.id,
|
||||
visibility_level: repo["visibility_level"],
|
||||
import_type: "gitlab",
|
||||
import_source: repo["path_with_namespace"],
|
||||
import_url: repo["http_url_to_repo"].sub("://", "://oauth2:#{@session_data[:gitlab_access_token]}@")
|
||||
).execute
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,26 +2,21 @@ module Gitlab
|
|||
module ImportExport
|
||||
class ProjectCreator
|
||||
|
||||
def initialize(namespace_id, current_user)
|
||||
@repo = repo
|
||||
@namespace = Namespace.find_by_id(namespace_id)
|
||||
def initialize(namespace_id, current_user, file, project_path)
|
||||
@namespace_id = namespace_id
|
||||
@current_user = current_user
|
||||
@user_map = user_map
|
||||
@file = file
|
||||
@project_path = project_path
|
||||
end
|
||||
|
||||
def execute
|
||||
::Projects::CreateService.new(
|
||||
current_user,
|
||||
name: repo.name,
|
||||
path: repo.name,
|
||||
description: repo.summary,
|
||||
namespace: namespace,
|
||||
creator: current_user,
|
||||
visibility_level: Gitlab::VisibilityLevel::PUBLIC,
|
||||
import_type: "google_code",
|
||||
import_source: repo.name,
|
||||
import_url: repo.import_url,
|
||||
import_data: { data: { 'repo' => repo.raw_data, 'user_map' => user_map } }
|
||||
name: @project_path,
|
||||
path: @project_path,
|
||||
namespace_id: namespace_id,
|
||||
import_type: "gitlab_project",
|
||||
import_source: @file
|
||||
).execute
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue