Commit 1ea44ee7 authored by James Lopez's avatar James Lopez

Merge branches 'feature/project-export-ui-experimental' and...

Merge branches 'feature/project-export-ui-experimental' and 'feature/project-import' of gitlab.com:gitlab-org/gitlab-ce into feature/project-export-ui-experimental
parents 903da377 279412f9
...@@ -90,7 +90,7 @@ module Gitlab ...@@ -90,7 +90,7 @@ module Gitlab
else else
relation_hash = relation_item[sub_relation.to_s] relation_hash = relation_item[sub_relation.to_s]
end end
return relation_hash, sub_relation [relation_hash, sub_relation]
end end
def create_relation(relation, relation_hash_list) def create_relation(relation, relation_hash_list)
......
...@@ -22,7 +22,7 @@ module Gitlab ...@@ -22,7 +22,7 @@ module Gitlab
private private
def project_json_tree def project_json_tree
@project.to_json(Gitlab::ImportExport::ImportExportReader.new(shared: @shared).project_tree) @project.to_json(Gitlab::ImportExport::Reader.new(shared: @shared).project_tree)
end end
end end
end end
......
module Gitlab module Gitlab
module ImportExport module ImportExport
class ImportExportReader class Reader
attr_reader :tree attr_reader :tree
......
...@@ -57,11 +57,11 @@ module Gitlab ...@@ -57,11 +57,11 @@ module Gitlab
author = @relation_hash.delete('author') author = @relation_hash.delete('author')
update_note_for_missing_author(author['name']) if can_update_notes? update_note_for_missing_author(author['name']) if missing_author?
end end
def can_update_notes? def missing_author?
(admin_user? && @members_mapper.missing_author_ids.include?(old_author_id)) || !admin_user? !admin_user? || @members_mapper.missing_author_ids.include?(old_author_id)
end end
def missing_author_note(updated_at, author_name) def missing_author_note(updated_at, author_name)
......
...@@ -12,6 +12,7 @@ module Gitlab ...@@ -12,6 +12,7 @@ module Gitlab
def save def save
return false if @project.empty_repo? return false if @project.empty_repo?
@full_path = File.join(@shared.export_path, ImportExport.project_bundle_filename) @full_path = File.join(@shared.export_path, ImportExport.project_bundle_filename)
bundle_to_disk bundle_to_disk
end end
......
...@@ -9,9 +9,7 @@ module Gitlab ...@@ -9,9 +9,7 @@ module Gitlab
def save def save
FileUtils.mkdir_p(@shared.export_path) FileUtils.mkdir_p(@shared.export_path)
File.open(version_file, 'w') do |file| File.write(version_file, Gitlab::ImportExport.version, mode: 'w')
file.write(Gitlab::ImportExport.version)
end
rescue => e rescue => e
@shared.error(e) @shared.error(e)
false false
......
require 'spec_helper'
describe Gitlab::ImportExport::ImportExportReader, lib: true do
let(:shared) { Gitlab::ImportExport::Shared.new(relative_path:'') }
let(:test_config) { 'spec/support/import_export/import_export.yml' }
let(:project_tree_hash) do
{
only: [:name, :path],
include: [:issues, :labels,
{ merge_requests: {
only: [:id],
except: [:iid],
include: [:merge_request_diff, :merge_request_test]
} },
{ commit_statuses: { include: :commit } }]
}
end
before do
allow_any_instance_of(Gitlab::ImportExport).to receive(:config_file).and_return(test_config)
end
it 'generates hash from project tree config' do
expect(described_class.new(shared: shared).project_tree).to match(project_tree_hash)
end
end
require 'spec_helper'
describe Gitlab::ImportExport::Reader, lib: true do
let(:shared) { Gitlab::ImportExport::Shared.new(relative_path:'') }
let(:test_config) { 'spec/support/import_export/import_export.yml' }
let(:project_tree_hash) do
{
only: [:name, :path],
include: [:issues, :labels,
{ merge_requests: {
only: [:id],
except: [:iid],
include: [:merge_request_diff, :merge_request_test]
} },
{ commit_statuses: { include: :commit } }]
}
end
before do
allow_any_instance_of(Gitlab::ImportExport).to receive(:config_file).and_return(test_config)
end
it 'generates hash from project tree config' do
expect(described_class.new(shared: shared).project_tree).to match(project_tree_hash)
end
context 'individual scenarios' do
it 'generates the correct hash for a single project relation' do
setup_yaml(project_tree: [:issues])
expect(described_class.new(shared: shared).project_tree).to match(include: [:issues])
end
it 'generates the correct hash for a multiple project relation' do
setup_yaml(project_tree: [:issues, :snippets])
expect(described_class.new(shared: shared).project_tree).to match(include: [:issues, :snippets])
end
it 'generates the correct hash for a single sub-relation' do
setup_yaml(project_tree: [issues: [:notes]])
expect(described_class.new(shared: shared).project_tree).to match(include: [{ issues: { include: :notes } }])
end
it 'generates the correct hash for a multiple sub-relation' do
setup_yaml(project_tree: [merge_requests: [:notes, :merge_request_diff]])
expect(described_class.new(shared: shared).project_tree).to match(include: [{ merge_requests: { include: [:notes, :merge_request_diff] } }])
end
it 'generates the correct hash for a sub-relation with another sub-relation' do
setup_yaml(project_tree: [merge_requests: [notes: :author]])
expect(described_class.new(shared: shared).project_tree).to match(include: [{ merge_requests: { include: { notes: { include: :author } } } }])
end
it 'generates the correct hash for a relation with included attributes' do
setup_yaml(project_tree: [:issues], included_attributes: { issues: [:name, :description] })
expect(described_class.new(shared: shared).project_tree).to match(include: [{ issues: { only: [:name, :description] } }])
end
it 'generates the correct hash for a relation with excluded attributes' do
setup_yaml(project_tree: [:issues], excluded_attributes: { issues: [:name] })
expect(described_class.new(shared: shared).project_tree).to match(include: [{ issues: { except: [:name] } }])
end
it 'generates the correct hash for a relation with both excluded and included attributes' do
setup_yaml(project_tree: [:issues], excluded_attributes: { issues: [:name] }, included_attributes: { issues: [:description] })
expect(described_class.new(shared: shared).project_tree).to match(include: [{ issues: { except: [:name], only: [:description] } }])
end
it 'generates the correct hash for a relation with custom methods' do
setup_yaml(project_tree: [:issues], methods: { issues: [:name] })
expect(described_class.new(shared: shared).project_tree).to match(include: [{ issues: { methods: [:name] } }])
end
def setup_yaml(hash)
allow(YAML).to receive(:load_file).with(test_config).and_return(hash)
end
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