refactored some namespace stuff and fixed project tree restorer spec. also removing controller so that it belongs to the UI MR
This commit is contained in:
parent
84c7b5185d
commit
a4d242b887
|
@ -1,45 +0,0 @@
|
||||||
class Import::GitlabProjectController < Import::BaseController
|
|
||||||
before_action :verify_gitlab_project_import_enabled
|
|
||||||
before_action :gitlab_project_auth, except: :callback
|
|
||||||
|
|
||||||
rescue_from OAuth::Error, with: :gitlab_project_unauthorized
|
|
||||||
|
|
||||||
#TODO permissions stuff
|
|
||||||
|
|
||||||
def callback
|
|
||||||
|
|
||||||
redirect_to status_import_gitlab_project_url
|
|
||||||
end
|
|
||||||
|
|
||||||
def status
|
|
||||||
@repos = client.projects
|
|
||||||
@incompatible_repos = client.incompatible_projects
|
|
||||||
|
|
||||||
@already_added_projects = current_user.created_projects.where(import_type: "gitlab_project")
|
|
||||||
already_added_projects_names = @already_added_projects.pluck(:import_source)
|
|
||||||
|
|
||||||
@repos.to_a.reject!{ |repo| already_added_projects_names.include? "#{repo["owner"]}/#{repo["slug"]}" }
|
|
||||||
end
|
|
||||||
|
|
||||||
def jobs
|
|
||||||
jobs = current_user.created_projects.where(import_type: "gitlab_project").to_json(only: [:id, :import_status])
|
|
||||||
render json: jobs
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
@file = params[:file]
|
|
||||||
|
|
||||||
repo_owner = current_user.username
|
|
||||||
@target_namespace = params[:new_namespace].presence || repo_owner
|
|
||||||
|
|
||||||
# namespace = get_or_create_namespace || (render and return)
|
|
||||||
|
|
||||||
@project = Gitlab::ImportExport::ImportService.execute(archive_file: file, owner: repo_owner)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def verify_gitlab_project_import_enabled
|
|
||||||
render_404 unless gitlab_project_import_enabled?
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -9,7 +9,7 @@ module Gitlab
|
||||||
def initialize(archive_file:, owner:, namespace_id:, project_path:)
|
def initialize(archive_file:, owner:, namespace_id:, project_path:)
|
||||||
@archive_file = archive_file
|
@archive_file = archive_file
|
||||||
@current_user = owner
|
@current_user = owner
|
||||||
@namespace_path = Namespace.find(namespace_id).path
|
@namespace = Namespace.find(namespace_id)
|
||||||
@project_path = project_path
|
@project_path = project_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def project_tree
|
def project_tree
|
||||||
@project_tree ||= Gitlab::ImportExport::ProjectTreeRestorer.new(path: storage_path, user: @current_user, project_path: @project_path)
|
@project_tree ||= Gitlab::ImportExport::ProjectTreeRestorer.new(path: storage_path, user: @current_user, project_path: @project_path, namespace_id: @namespace.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def restore_repo
|
def restore_repo
|
||||||
|
@ -37,7 +37,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def path_with_namespace
|
def path_with_namespace
|
||||||
File.join(@namespace_path, @project_path)
|
File.join(@namespace.path, @project_path)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,17 +3,19 @@ module Gitlab
|
||||||
module ProjectFactory
|
module ProjectFactory
|
||||||
extend self
|
extend self
|
||||||
|
|
||||||
def create(project_params:, user:)
|
def create(project_params:, user:, namespace_id:)
|
||||||
project = Project.new(project_params.except('id'))
|
project = Project.new(project_params.except('id'))
|
||||||
project.creator = user
|
project.creator = user
|
||||||
check_namespace(project_params['namespace_id'], project, user)
|
check_namespace(namespace_id, project, user)
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_namespace(namespace_id, project, user)
|
def check_namespace(namespace_id, project, user)
|
||||||
if namespace_id
|
if namespace_id
|
||||||
# Find matching namespace and check if it allowed
|
# Find matching namespace and check if it allowed
|
||||||
# for current user if namespace_id passed.
|
# for current user if namespace_id passed.
|
||||||
unless allowed_namespace?(user, namespace_id)
|
if allowed_namespace?(user, namespace_id)
|
||||||
|
project.namespace_id = namespace_id
|
||||||
|
else
|
||||||
project.namespace_id = nil
|
project.namespace_id = nil
|
||||||
deny_namespace(project)
|
deny_namespace(project)
|
||||||
end
|
end
|
||||||
|
@ -34,7 +36,6 @@ module Gitlab
|
||||||
def deny_namespace(project)
|
def deny_namespace(project)
|
||||||
project.errors.add(:namespace, "is not valid")
|
project.errors.add(:namespace, "is not valid")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,10 +2,11 @@ module Gitlab
|
||||||
module ImportExport
|
module ImportExport
|
||||||
class ProjectTreeRestorer
|
class ProjectTreeRestorer
|
||||||
|
|
||||||
def initialize(path:, user:, project_path:)
|
def initialize(path:, user:, project_path:, namespace_id:)
|
||||||
@path = File.join(path, 'project.json')
|
@path = File.join(path, 'project.json')
|
||||||
@user = user
|
@user = user
|
||||||
@project_path = project_path
|
@project_path = project_path
|
||||||
|
@namespace_id = namespace_id
|
||||||
end
|
end
|
||||||
|
|
||||||
def restore
|
def restore
|
||||||
|
@ -30,9 +31,8 @@ module Gitlab
|
||||||
saved = []
|
saved = []
|
||||||
relation_list.each do |relation|
|
relation_list.each do |relation|
|
||||||
next if !relation.is_a?(Hash) && tree_hash[relation.to_s].blank?
|
next if !relation.is_a?(Hash) && tree_hash[relation.to_s].blank?
|
||||||
if relation.is_a?(Hash)
|
create_sub_relations(relation, tree_hash) if relation.is_a?(Hash)
|
||||||
create_sub_relations(relation, tree_hash)
|
|
||||||
end
|
|
||||||
relation_key = relation.is_a?(Hash) ? relation.keys.first : relation
|
relation_key = relation.is_a?(Hash) ? relation.keys.first : relation
|
||||||
relation_hash = create_relation(relation_key, tree_hash[relation_key.to_s])
|
relation_hash = create_relation(relation_key, tree_hash[relation_key.to_s])
|
||||||
saved << project.update_attribute(relation_key, relation_hash)
|
saved << project.update_attribute(relation_key, relation_hash)
|
||||||
|
@ -47,7 +47,7 @@ module Gitlab
|
||||||
def create_project
|
def create_project
|
||||||
project_params = @tree_hash.reject { |_key, value| value.is_a?(Array) }
|
project_params = @tree_hash.reject { |_key, value| value.is_a?(Array) }
|
||||||
project = Gitlab::ImportExport::ProjectFactory.create(
|
project = Gitlab::ImportExport::ProjectFactory.create(
|
||||||
project_params: project_params, user: @user)
|
project_params: project_params, user: @user, namespace_id: @namespace_id)
|
||||||
project.path = @project_path
|
project.path = @project_path
|
||||||
project.name = @project_path
|
project.name = @project_path
|
||||||
project.save
|
project.save
|
||||||
|
|
|
@ -3,7 +3,7 @@ module Gitlab
|
||||||
class RepoRestorer
|
class RepoRestorer
|
||||||
include Gitlab::ImportExport::CommandLineUtil
|
include Gitlab::ImportExport::CommandLineUtil
|
||||||
|
|
||||||
def initialize(project: , path: )
|
def initialize(project:, path:)
|
||||||
@project = project
|
@project = project
|
||||||
# TODO remove magic keyword and move it to a shared config
|
# TODO remove magic keyword and move it to a shared config
|
||||||
@path = File.join(path, 'project.bundle')
|
@path = File.join(path, 'project.bundle')
|
||||||
|
|
|
@ -4,7 +4,8 @@ describe Gitlab::ImportExport::ProjectTreeRestorer, services: true do
|
||||||
describe :restore do
|
describe :restore do
|
||||||
|
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
let(:project_tree_restorer) { Gitlab::ImportExport::ProjectTreeRestorer.new(path: "fixtures/import_export/project.json", user: user) }
|
let(:namespace) { create(:namespace, owner: user) }
|
||||||
|
let(:project_tree_restorer) { Gitlab::ImportExport::ProjectTreeRestorer.new(path: "lib/gitlab/import_export/", user: user, project_path: 'project', namespace_id: namespace.id) }
|
||||||
|
|
||||||
context 'JSON' do
|
context 'JSON' do
|
||||||
let(:restored_project_json) do
|
let(:restored_project_json) do
|
||||||
|
|
|
@ -58,3 +58,7 @@ RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator.class_eval do
|
||||||
end
|
end
|
||||||
|
|
||||||
ActiveRecord::Migration.maintain_test_schema!
|
ActiveRecord::Migration.maintain_test_schema!
|
||||||
|
|
||||||
|
Capybara.register_driver :poltergeist do |app|
|
||||||
|
Capybara::Poltergeist::Driver.new(app, timeout: 1.minute)
|
||||||
|
end
|
Loading…
Reference in New Issue