Commit 9ecebaae authored by James Lopez's avatar James Lopez
Browse files

adding notifications stuff and more refactoring for exporting projects

parent ee0d55779ff5
......@@ -12,7 +12,7 @@ def create
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 @@ def export
redirect_to(
edit_project_path(@project),
notice: "Project export successfully started."
notice: "Project export started."
)
end
......
......@@ -50,6 +50,19 @@ def project_invite_declined_email(project_id, invite_email, access_level, create
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 @@ def issue_moved(issue, new_issue, current_user)
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 @@ def execute
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 @@ def execute(_options = {})
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 @@ def wiki_repo_saver
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
%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.
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.
%p
Project #{@project.name} couldn't be exported.
%p
The errors we encountered were:
%h3{style: "background: black; color: red;"}
#{@errors}
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 GitlabImport
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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment