Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
a23ca284
Commit
a23ca284
authored
Oct 26, 2016
by
James Lopez
Committed by
Robert Speicher
Nov 01, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed Import/Export foreign key issue to do with project members
parent
912e1ff4
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
75 additions
and
4 deletions
+75
-4
lib/gitlab/import_export/attribute_cleaner.rb
lib/gitlab/import_export/attribute_cleaner.rb
+28
-0
lib/gitlab/import_export/members_mapper.rb
lib/gitlab/import_export/members_mapper.rb
+6
-1
lib/gitlab/import_export/relation_factory.rb
lib/gitlab/import_export/relation_factory.rb
+4
-3
spec/lib/gitlab/import_export/attribute_cleaner_spec.rb
spec/lib/gitlab/import_export/attribute_cleaner_spec.rb
+37
-0
No files found.
lib/gitlab/import_export/attribute_cleaner.rb
0 → 100644
View file @
a23ca284
module
Gitlab
module
ImportExport
class
AttributeCleaner
ALLOWED_REFERENCES
=
RelationFactory
::
PROJECT_REFERENCES
+
RelationFactory
::
USER_REFERENCES
+
[
'group_id'
]
def
self
.
clean
(
*
args
)
new
(
*
args
).
clean
end
def
initialize
(
relation_hash
:,
relation_class
:)
@relation_hash
=
relation_hash
@relation_class
=
relation_class
end
def
clean
@relation_hash
.
reject
do
|
key
,
_value
|
prohibited_key?
(
key
)
||
!
@relation_class
.
attribute_method?
(
key
)
end
.
except
(
'id'
)
end
private
def
prohibited_key?
(
key
)
key
.
end_with?
(
'_id'
)
&&
!
ALLOWED_REFERENCES
.
include?
(
key
)
end
end
end
end
lib/gitlab/import_export/members_mapper.rb
View file @
a23ca284
...
@@ -52,7 +52,12 @@ module Gitlab
...
@@ -52,7 +52,12 @@ module Gitlab
end
end
def
member_hash
(
member
)
def
member_hash
(
member
)
member
.
except
(
'id'
).
merge
(
source_id:
@project
.
id
,
importing:
true
)
parsed_hash
(
member
).
merge
(
'source_id'
=>
@project
.
id
,
'importing'
=>
true
)
end
def
parsed_hash
(
member
)
Gitlab
::
ImportExport
::
AttributeCleaner
.
clean
(
relation_hash:
member
.
deep_stringify_keys
,
relation_class:
ProjectMember
)
end
end
def
find_project_user_query
(
member
)
def
find_project_user_query
(
member
)
...
...
lib/gitlab/import_export/relation_factory.rb
View file @
a23ca284
...
@@ -9,7 +9,7 @@ module Gitlab
...
@@ -9,7 +9,7 @@ module Gitlab
builds:
'Ci::Build'
,
builds:
'Ci::Build'
,
hooks:
'ProjectHook'
}.
freeze
hooks:
'ProjectHook'
}.
freeze
USER_REFERENCES
=
%w[author_id assignee_id updated_by_id user_id]
.
freeze
USER_REFERENCES
=
%w[author_id assignee_id updated_by_id user_id
created_by_id
]
.
freeze
BUILD_MODELS
=
%w[Ci::Build commit_status]
.
freeze
BUILD_MODELS
=
%w[Ci::Build commit_status]
.
freeze
...
@@ -23,7 +23,7 @@ module Gitlab
...
@@ -23,7 +23,7 @@ module Gitlab
def
initialize
(
relation_sym
:,
relation_hash
:,
members_mapper
:,
user
:)
def
initialize
(
relation_sym
:,
relation_hash
:,
members_mapper
:,
user
:)
@relation_name
=
OVERRIDES
[
relation_sym
]
||
relation_sym
@relation_name
=
OVERRIDES
[
relation_sym
]
||
relation_sym
@relation_hash
=
relation_hash
.
except
(
'
id'
,
'noteable_id'
)
@relation_hash
=
relation_hash
.
except
(
'
noteable_id'
).
merge
(
'project_id'
=>
project_id
)
@members_mapper
=
members_mapper
@members_mapper
=
members_mapper
@user
=
user
@user
=
user
@imported_object_retries
=
0
@imported_object_retries
=
0
...
@@ -147,7 +147,8 @@ module Gitlab
...
@@ -147,7 +147,8 @@ module Gitlab
end
end
def
parsed_relation_hash
def
parsed_relation_hash
@relation_hash
.
reject
{
|
k
,
_v
|
!
relation_class
.
attribute_method?
(
k
)
}
@parsed_relation_hash
||=
Gitlab
::
ImportExport
::
AttributeCleaner
.
clean
(
relation_hash:
@relation_hash
,
relation_class:
relation_class
)
end
end
def
set_st_diffs
def
set_st_diffs
...
...
spec/lib/gitlab/import_export/attribute_cleaner_spec.rb
0 → 100644
View file @
a23ca284
require
'spec_helper'
describe
Gitlab
::
ImportExport
::
AttributeCleaner
,
lib:
true
do
let
(
:relation_class
){
double
(
'relation_class'
).
as_null_object
}
let
(
:unsafe_hash
)
do
{
'id'
=>
101
,
'service_id'
=>
99
,
'moved_to_id'
=>
99
,
'namespace_id'
=>
99
,
'ci_id'
=>
99
,
'random_project_id'
=>
99
,
'random_id'
=>
99
,
'milestone_id'
=>
99
,
'project_id'
=>
99
,
'user_id'
=>
99
,
'random_id_in_the_middle'
=>
99
,
'notid'
=>
99
}
end
let
(
:post_safe_hash
)
do
{
'project_id'
=>
99
,
'user_id'
=>
99
,
'random_id_in_the_middle'
=>
99
,
'notid'
=>
99
}
end
it
'removes unwanted attributes from the hash'
do
# allow(relation_class).to receive(:attribute_method?).and_return(true)
parsed_hash
=
described_class
.
clean
(
relation_hash:
unsafe_hash
,
relation_class:
relation_class
)
expect
(
parsed_hash
).
to
eq
(
post_safe_hash
)
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment