summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-06-14 20:32:19 +0200
committerJames Lopez <james@jameslopez.es>2016-06-14 20:32:19 +0200
commitb53ed84843b97c45bb19095cd2c7e0e8c86eb41a (patch)
tree3dbfeace867e212b6e3838421fcce02682abaa80
parent1d4243f5dd219d6e139864456353bee5f325bd72 (diff)
downloadgitlab-ce-b53ed84843b97c45bb19095cd2c7e0e8c86eb41a.tar.gz
adapted current services stuff to use new project import, plus fixes a few issues, updated routes, etc...
-rw-r--r--app/controllers/import/gitlab_projects_controller.rb9
-rw-r--r--app/models/project.rb2
-rw-r--r--app/services/projects/import_service.rb24
-rw-r--r--config/routes.rb2
-rw-r--r--lib/gitlab/import_export/importer.rb36
-rw-r--r--lib/gitlab/import_export/project_creator.rb4
-rw-r--r--lib/gitlab/import_export/project_tree_restorer.rb10
-rw-r--r--lib/gitlab/import_export/version_checker.rb4
8 files changed, 42 insertions, 49 deletions
diff --git a/app/controllers/import/gitlab_projects_controller.rb b/app/controllers/import/gitlab_projects_controller.rb
index d4063747da4..f7fddde37e6 100644
--- a/app/controllers/import/gitlab_projects_controller.rb
+++ b/app/controllers/import/gitlab_projects_controller.rb
@@ -12,20 +12,21 @@ class Import::GitlabProjectsController < Import::BaseController
return redirect_back_or_default(options: { alert: "You need to upload a GitLab project export archive." })
end
- @project = Gitlab::ImportExport::ProjectCreator.new(Namespace.find(project_params[:namespace_id]),
+ @project = Gitlab::ImportExport::ProjectCreator.new(project_params[:namespace_id],
current_user,
File.expand_path(params[:file].path),
project_params[:path]).execute
- flash[:notice] = "The project import has been started."
-
if @project.saved?
redirect_to(
project_path(@project),
notice: "Project '#{@project.name}' is being imported."
)
else
- render 'new'
+ redirect_to(
+ new_project_path,
+ alert: "Project could not be exported: #{@project.errors.full_messages.join(', ')}"
+ )
end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index 323bde5d5c4..9d7b988bf21 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -451,7 +451,7 @@ class Project < ActiveRecord::Base
end
def import?
- external_import? || forked?
+ external_import? || forked? || gitlab_project_import?
end
def no_import?
diff --git a/app/services/projects/import_service.rb b/app/services/projects/import_service.rb
index b4b4c34b012..9159ec08959 100644
--- a/app/services/projects/import_service.rb
+++ b/app/services/projects/import_service.rb
@@ -14,22 +14,26 @@ module Projects
]
def execute
- if unknown_url?
- # In this case, we only want to import issues, not a repository.
- create_repository
- else
- import_repository
- end
+ add_repository_to_project unless project.gitlab_project_import?
import_data
success
- rescue Error => e
+ rescue => e
error(e.message)
end
private
+ def add_repository_to_project
+ if unknown_url?
+ # In this case, we only want to import issues, not a repository.
+ create_repository
+ else
+ import_repository
+ end
+ end
+
def create_repository
unless project.create_repository
raise Error, 'The repository could not be created.'
@@ -38,7 +42,7 @@ module Projects
def import_repository
begin
- gitlab_shell.import_repository(project.path_with_namespace, project.import_url) unless @project.gitlab_project_import?
+ gitlab_shell.import_repository(project.path_with_namespace, project.import_url)
rescue Gitlab::Shell::Error => e
raise Error, "Error importing repository #{project.import_url} into #{project.path_with_namespace} - #{e.message}"
end
@@ -47,7 +51,7 @@ module Projects
def import_data
return unless has_importer?
- project.repository.before_import
+ project.repository.before_import unless project.gitlab_project_import?
unless importer.execute
raise Error, 'The remote data could not be imported.'
@@ -59,7 +63,7 @@ module Projects
end
def importer
- return Gitlab::ImportExport::Importer if @project.gitlab_project_import?
+ return Gitlab::ImportExport::Importer.new(project) if @project.gitlab_project_import?
class_name = "Gitlab::#{project.import_type.camelize}Import::Importer"
class_name.constantize.new(project)
diff --git a/config/routes.rb b/config/routes.rb
index bc1112de0f5..024a0df6e44 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -455,7 +455,7 @@ Rails.application.routes.draw do
post :toggle_star
post :markdown_preview
post :export
- post :download_export
+ get :download_export
get :autocomplete_sources
get :activity
end
diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb
index d096e17bdf0..4db9410bba1 100644
--- a/lib/gitlab/import_export/importer.rb
+++ b/lib/gitlab/import_export/importer.rb
@@ -2,24 +2,22 @@ module Gitlab
module ImportExport
class Importer
- def self.execute(*args)
- new(*args).execute
- end
-
def initialize(project)
@archive_file = project.import_source
@current_user = project.creator
- @shared = Gitlab::ImportExport::Shared.new(relative_path: path_with_namespace(@project.path))
+ @project = project
+ @shared = Gitlab::ImportExport::Shared.new(relative_path: path_with_namespace)
end
def execute
Gitlab::ImportExport::FileImporter.import(archive_file: @archive_file,
shared: @shared)
if check_version! && [project_tree, repo_restorer, wiki_restorer, uploads_restorer].all?(&:restore)
- project_tree.project
+ project_tree.restored_project
else
- project_tree.project.destroy if project_tree.project
- nil
+ project_tree.restored_project.destroy if project_tree.restored_project
+
+ raise Projects::ImportService::Error.new, @shared.errors.join(', ')
end
end
@@ -38,22 +36,22 @@ module Gitlab
def repo_restorer
Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: repo_path,
shared: @shared,
- project: project_tree.project)
+ project: project_tree.restored_project)
end
def wiki_restorer
Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: wiki_repo_path,
shared: @shared,
- project: ProjectWiki.new(project_tree.project),
+ project: ProjectWiki.new(project_tree.restored_project),
wiki: true)
end
def uploads_restorer
- Gitlab::ImportExport::UploadsRestorer.new(project: project_tree.project, shared: @shared)
+ Gitlab::ImportExport::UploadsRestorer.new(project: project_tree.restored_project, shared: @shared)
end
- def path_with_namespace(project_path)
- File.join(@namespace.path, project_path)
+ def path_with_namespace
+ File.join(@project.namespace.path, @project.path)
end
def repo_path
@@ -63,18 +61,6 @@ module Gitlab
def wiki_repo_path
File.join(@shared.export_path, 'project.wiki.bundle')
end
-
- def attributes_for_todo
- { user_id: @current_user.id,
- project_id: project_tree.project.id,
- target_type: 'Project',
- target: project_tree.project,
- action: Todo::IMPORTED,
- author_id: @current_user.id,
- state: :pending,
- target_id: project_tree.project.id
- }
- end
end
end
end
diff --git a/lib/gitlab/import_export/project_creator.rb b/lib/gitlab/import_export/project_creator.rb
index 6f1e3867efb..89388d1984b 100644
--- a/lib/gitlab/import_export/project_creator.rb
+++ b/lib/gitlab/import_export/project_creator.rb
@@ -11,10 +11,10 @@ module Gitlab
def execute
::Projects::CreateService.new(
- current_user,
+ @current_user,
name: @project_path,
path: @project_path,
- namespace_id: namespace_id,
+ namespace_id: @namespace_id,
import_type: "gitlab_project",
import_source: @file
).execute
diff --git a/lib/gitlab/import_export/project_tree_restorer.rb b/lib/gitlab/import_export/project_tree_restorer.rb
index 92727528d01..dd71b92c522 100644
--- a/lib/gitlab/import_export/project_tree_restorer.rb
+++ b/lib/gitlab/import_export/project_tree_restorer.rb
@@ -19,7 +19,7 @@ module Gitlab
false
end
- def project
+ def restored_project
@restored_project ||= restore_project
end
@@ -28,7 +28,7 @@ module Gitlab
def members_mapper
@members_mapper ||= Gitlab::ImportExport::MembersMapper.new(exported_members: @project_members,
user: @user,
- project: project)
+ project: restored_project)
end
# Loops through the tree of models defined in import_export.yml and
@@ -45,7 +45,7 @@ module Gitlab
relation_key = relation.is_a?(Hash) ? relation.keys.first : relation
relation_hash = create_relation(relation_key, @tree_hash[relation_key.to_s])
- saved << project.update_attribute(relation_key, relation_hash)
+ saved << restored_project.update_attribute(relation_key, relation_hash)
end
saved.all?
end
@@ -57,6 +57,8 @@ module Gitlab
end
def restore_project
+ return @project unless @tree_hash
+
project_params = @tree_hash.reject { |_key, value| value.is_a?(Array) }
@project.update(project_params)
@project
@@ -91,7 +93,7 @@ module Gitlab
def create_relation(relation, relation_hash_list)
relation_array = [relation_hash_list].flatten.map do |relation_hash|
Gitlab::ImportExport::RelationFactory.create(relation_sym: relation.to_sym,
- relation_hash: relation_hash.merge('project_id' => project.id),
+ relation_hash: relation_hash.merge('project_id' => restored_project.id),
members_mapper: members_mapper,
user: @user)
end
diff --git a/lib/gitlab/import_export/version_checker.rb b/lib/gitlab/import_export/version_checker.rb
index 4f467760862..cf5c62c5e3c 100644
--- a/lib/gitlab/import_export/version_checker.rb
+++ b/lib/gitlab/import_export/version_checker.rb
@@ -2,8 +2,8 @@ module Gitlab
module ImportExport
class VersionChecker
- def self.restore(*args)
- new(*args).check
+ def self.check!(*args)
+ new(*args).check!
end
def initialize(shared:)