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
1
Merge Requests
1
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
nexedi
gitlab-ce
Commits
471457d4
Commit
471457d4
authored
Apr 23, 2018
by
Lin Jen-Shin
Committed by
Nick Thomas
Apr 23, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
EE: Make sure we're not creating duplicated namespace
parent
048d388f
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
82 additions
and
29 deletions
+82
-29
app/models/concerns/routable.rb
app/models/concerns/routable.rb
+6
-1
app/models/group.rb
app/models/group.rb
+4
-0
changelogs/unreleased/42936-improve-ns-factory-avoid-duplicates.yml
.../unreleased/42936-improve-ns-factory-avoid-duplicates.yml
+6
-0
ee/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb
...c/lib/gitlab/legacy_github_import/project_creator_spec.rb
+1
-1
lib/api/helpers/notes_helpers.rb
lib/api/helpers/notes_helpers.rb
+3
-1
spec/controllers/import/bitbucket_controller_spec.rb
spec/controllers/import/bitbucket_controller_spec.rb
+3
-2
spec/controllers/import/gitlab_controller_spec.rb
spec/controllers/import/gitlab_controller_spec.rb
+3
-2
spec/controllers/projects/forks_controller_spec.rb
spec/controllers/projects/forks_controller_spec.rb
+5
-1
spec/factories/groups.rb
spec/factories/groups.rb
+8
-0
spec/factories/namespaces.rb
spec/factories/namespaces.rb
+17
-1
spec/features/projects/new_project_spec.rb
spec/features/projects/new_project_spec.rb
+2
-2
spec/lib/gitlab/bitbucket_import/project_creator_spec.rb
spec/lib/gitlab/bitbucket_import/project_creator_spec.rb
+1
-1
spec/lib/gitlab/gitlab_import/project_creator_spec.rb
spec/lib/gitlab/gitlab_import/project_creator_spec.rb
+1
-1
spec/lib/gitlab/google_code_import/project_creator_spec.rb
spec/lib/gitlab/google_code_import/project_creator_spec.rb
+1
-1
spec/lib/gitlab/legacy_github_import/project_creator_spec.rb
spec/lib/gitlab/legacy_github_import/project_creator_spec.rb
+1
-1
spec/models/project_spec.rb
spec/models/project_spec.rb
+1
-1
spec/models/user_spec.rb
spec/models/user_spec.rb
+5
-3
spec/requests/api/discussions_spec.rb
spec/requests/api/discussions_spec.rb
+2
-2
spec/requests/api/notes_spec.rb
spec/requests/api/notes_spec.rb
+2
-2
spec/services/groups/nested_create_service_spec.rb
spec/services/groups/nested_create_service_spec.rb
+5
-2
spec/support/controllers/githubish_import_controller_shared_examples.rb
...ontrollers/githubish_import_controller_shared_examples.rb
+5
-4
No files found.
app/models/concerns/routable.rb
View file @
471457d4
...
...
@@ -102,7 +102,7 @@ module Routable
# the route. Caching this per request ensures that even if we have multiple instances,
# we will not have to duplicate work, avoiding N+1 queries in some cases.
def
full_path
return
uncached_full_path
unless
RequestStore
.
active?
return
uncached_full_path
unless
RequestStore
.
active?
&&
id
RequestStore
[
full_path_key
]
||=
uncached_full_path
end
...
...
@@ -124,6 +124,11 @@ module Routable
end
end
# Group would override this to check from association
def
owned_by?
(
user
)
owner
==
user
end
private
def
set_path_errors
...
...
app/models/group.rb
View file @
471457d4
...
...
@@ -141,6 +141,10 @@ class Group < Namespace
self
[
:lfs_enabled
]
end
def
owned_by?
(
user
)
owners
.
include?
(
user
)
end
def
add_users
(
users
,
access_level
,
current_user:
nil
,
expires_at:
nil
)
GroupMember
.
add_users
(
self
,
...
...
changelogs/unreleased/42936-improve-ns-factory-avoid-duplicates.yml
0 → 100644
View file @
471457d4
---
title
:
Fix discussions API setting created_at for notable in a group or notable in
a project in a group with owners
merge_request
:
18464
author
:
type
:
fixed
ee/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb
View file @
471457d4
...
...
@@ -2,7 +2,7 @@ require 'spec_helper'
describe
Gitlab
::
LegacyGithubImport
::
ProjectCreator
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:namespace
)
{
create
(
:group
,
owner:
user
)
}
let
(
:namespace
)
{
create
(
:group
)
}
let
(
:repo
)
do
OpenStruct
.
new
(
...
...
lib/api/helpers/notes_helpers.rb
View file @
471457d4
...
...
@@ -66,8 +66,10 @@ module API
authorize!
:create_note
,
noteable
parent
=
noteable_parent
(
noteable
)
if
opts
[
:created_at
]
opts
.
delete
(
:created_at
)
unless
current_user
.
admin?
||
parent
.
owner
==
current_user
opts
.
delete
(
:created_at
)
unless
current_user
.
admin?
||
parent
.
owned_by?
(
current_user
)
end
project
=
parent
if
parent
.
is_a?
(
Project
)
...
...
spec/controllers/import/bitbucket_controller_spec.rb
View file @
471457d4
...
...
@@ -223,11 +223,12 @@ describe Import::BitbucketController do
end
context
'user has chosen an existing nested namespace and name for the project'
,
:postgresql
do
let
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
,
owner:
user
)
}
let
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
)
}
let
(
:nested_namespace
)
{
create
(
:group
,
name:
'bar'
,
parent:
parent_namespace
)
}
let
(
:test_name
)
{
'test_name'
}
before
do
parent_namespace
.
add_owner
(
user
)
nested_namespace
.
add_owner
(
user
)
end
...
...
@@ -273,7 +274,7 @@ describe Import::BitbucketController do
context
'user has chosen existent and non-existent nested namespaces and name for the project'
,
:postgresql
do
let
(
:test_name
)
{
'test_name'
}
let!
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
,
owner:
user
)
}
let!
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
)
}
before
do
parent_namespace
.
add_owner
(
user
)
...
...
spec/controllers/import/gitlab_controller_spec.rb
View file @
471457d4
...
...
@@ -196,10 +196,11 @@ describe Import::GitlabController do
end
context
'user has chosen an existing nested namespace for the project'
,
:postgresql
do
let
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
,
owner:
user
)
}
let
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
)
}
let
(
:nested_namespace
)
{
create
(
:group
,
name:
'bar'
,
parent:
parent_namespace
)
}
before
do
parent_namespace
.
add_owner
(
user
)
nested_namespace
.
add_owner
(
user
)
end
...
...
@@ -245,7 +246,7 @@ describe Import::GitlabController do
context
'user has chosen existent and non-existent nested namespaces and name for the project'
,
:postgresql
do
let
(
:test_name
)
{
'test_name'
}
let!
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
,
owner:
user
)
}
let!
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
)
}
before
do
parent_namespace
.
add_owner
(
user
)
...
...
spec/controllers/projects/forks_controller_spec.rb
View file @
471457d4
...
...
@@ -4,7 +4,11 @@ describe Projects::ForksController do
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
,
:public
,
:repository
)
}
let
(
:forked_project
)
{
Projects
::
ForkService
.
new
(
project
,
user
).
execute
}
let
(
:group
)
{
create
(
:group
,
owner:
forked_project
.
creator
)
}
let
(
:group
)
{
create
(
:group
)
}
before
do
group
.
add_owner
(
user
)
end
describe
'GET index'
do
def
get_forks
...
...
spec/factories/groups.rb
View file @
471457d4
...
...
@@ -6,6 +6,14 @@ FactoryBot.define do
owner
nil
project_creation_level
::
EE
::
Gitlab
::
Access
::
MASTER_PROJECT_ACCESS
after
(
:create
)
do
|
group
|
if
group
.
owner
# We could remove this after we have proper constraint:
# https://gitlab.com/gitlab-org/gitlab-ce/issues/43292
raise
"Don't set owner for groups, use `group.add_owner(user)` instead"
end
end
trait
:public
do
visibility_level
Gitlab
::
VisibilityLevel
::
PUBLIC
end
...
...
spec/factories/namespaces.rb
View file @
471457d4
...
...
@@ -2,7 +2,23 @@ FactoryBot.define do
factory
:namespace
do
sequence
(
:name
)
{
|
n
|
"namespace
#{
n
}
"
}
path
{
name
.
downcase
.
gsub
(
/\s/
,
'_'
)
}
owner
# This is a workaround to avoid the user creating another namespace via
# User#ensure_namespace_correct. We should try to remove it and then
# we could remove this workaround
association
:owner
,
factory: :user
,
strategy: :build
before
(
:create
)
do
|
namespace
|
owner
=
namespace
.
owner
if
owner
# We're changing the username here because we want to keep our path,
# and User#ensure_namespace_correct would change the path based on
# username, so we're forced to do this otherwise we'll need to change
# a lot of existing tests.
owner
.
username
=
namespace
.
path
owner
.
namespace
=
namespace
end
end
trait
:with_build_minutes
do
namespace_statistics
factory: :namespace_statistics
,
shared_runners_seconds:
400
.
minutes
.
to_i
...
...
spec/features/projects/new_project_spec.rb
View file @
471457d4
...
...
@@ -64,7 +64,7 @@ feature 'New project' do
end
context
'with group namespace'
do
let
(
:group
)
{
create
(
:group
,
:private
,
owner:
user
)
}
let
(
:group
)
{
create
(
:group
,
:private
)
}
before
do
group
.
add_owner
(
user
)
...
...
@@ -81,7 +81,7 @@ feature 'New project' do
end
context
'with subgroup namespace'
do
let
(
:group
)
{
create
(
:group
,
owner:
user
)
}
let
(
:group
)
{
create
(
:group
)
}
let
(
:subgroup
)
{
create
(
:group
,
parent:
group
)
}
before
do
...
...
spec/lib/gitlab/bitbucket_import/project_creator_spec.rb
View file @
471457d4
...
...
@@ -15,7 +15,7 @@ describe Gitlab::BitbucketImport::ProjectCreator do
has_wiki?:
false
)
end
let
(
:namespace
)
{
create
(
:group
,
owner:
user
)
}
let
(
:namespace
)
{
create
(
:group
)
}
let
(
:token
)
{
"asdasd12345"
}
let
(
:secret
)
{
"sekrettt"
}
let
(
:access_params
)
{
{
bitbucket_access_token:
token
,
bitbucket_access_token_secret:
secret
}
}
...
...
spec/lib/gitlab/gitlab_import/project_creator_spec.rb
View file @
471457d4
...
...
@@ -12,7 +12,7 @@ describe Gitlab::GitlabImport::ProjectCreator do
owner:
{
name:
"john"
}
}.
with_indifferent_access
end
let
(
:namespace
)
{
create
(
:group
,
owner:
user
)
}
let
(
:namespace
)
{
create
(
:group
)
}
let
(
:token
)
{
"asdffg"
}
let
(
:access_params
)
{
{
gitlab_access_token:
token
}
}
...
...
spec/lib/gitlab/google_code_import/project_creator_spec.rb
View file @
471457d4
...
...
@@ -9,7 +9,7 @@ describe Gitlab::GoogleCodeImport::ProjectCreator do
"repositoryUrls"
=>
[
"https://vim.googlecode.com/git/"
]
)
end
let
(
:namespace
)
{
create
(
:group
,
owner:
user
)
}
let
(
:namespace
)
{
create
(
:group
)
}
before
do
namespace
.
add_owner
(
user
)
...
...
spec/lib/gitlab/legacy_github_import/project_creator_spec.rb
View file @
471457d4
...
...
@@ -2,7 +2,7 @@ require 'spec_helper'
describe
Gitlab
::
LegacyGithubImport
::
ProjectCreator
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:namespace
)
{
create
(
:group
,
owner:
user
)
}
let
(
:namespace
)
{
create
(
:group
)
}
let
(
:repo
)
do
OpenStruct
.
new
(
...
...
spec/models/project_spec.rb
View file @
471457d4
...
...
@@ -364,7 +364,7 @@ describe Project do
let
(
:owner
)
{
create
(
:user
,
name:
'Gitlab'
)
}
let
(
:namespace
)
{
create
(
:namespace
,
path:
'sample-namespace'
,
owner:
owner
)
}
let
(
:project
)
{
create
(
:project
,
path:
'sample-project'
,
namespace:
namespace
)
}
let
(
:group
)
{
create
(
:group
,
name:
'Group'
,
path:
'sample-group'
,
owner:
owner
)
}
let
(
:group
)
{
create
(
:group
,
name:
'Group'
,
path:
'sample-group'
)
}
context
'when nil argument'
do
it
'returns nil'
do
...
...
spec/models/user_spec.rb
View file @
471457d4
...
...
@@ -1192,8 +1192,12 @@ describe User do
end
context
'with a group route matching the given path'
do
let!
(
:group
)
{
create
(
:group
,
path:
'group_path'
)
}
context
'when the group namespace has an owner_id (legacy data)'
do
let!
(
:group
)
{
create
(
:group
,
path:
'group_path'
,
owner:
user
)
}
before
do
group
.
update!
(
owner_id:
user
.
id
)
end
it
'returns nil'
do
expect
(
described_class
.
find_by_full_path
(
'group_path'
)).
to
eq
(
nil
)
...
...
@@ -1201,8 +1205,6 @@ describe User do
end
context
'when the group namespace does not have an owner_id'
do
let!
(
:group
)
{
create
(
:group
,
path:
'group_path'
)
}
it
'returns nil'
do
expect
(
described_class
.
find_by_full_path
(
'group_path'
)).
to
eq
(
nil
)
end
...
...
spec/requests/api/discussions_spec.rb
View file @
471457d4
...
...
@@ -32,13 +32,13 @@ describe API::Discussions do
end
context
"when noteable is an Epic"
do
let
(
:group
)
{
create
(
:group
,
:public
,
owner:
user
)
}
let
(
:group
)
{
create
(
:group
,
:public
)
}
let
(
:ext_group
)
{
create
(
:group
,
:public
)
}
let
(
:epic
)
{
create
(
:epic
,
group:
group
,
author:
user
)
}
let!
(
:epic_note
)
{
create
(
:discussion_note
,
noteable:
epic
,
project:
project
,
author:
user
)
}
before
do
group
.
add_
develop
er
(
user
)
group
.
add_
own
er
(
user
)
stub_licensed_features
(
epics:
true
)
end
...
...
spec/requests/api/notes_spec.rb
View file @
471457d4
...
...
@@ -184,13 +184,13 @@ describe API::Notes do
end
context
"when noteable is an Epic"
do
let
(
:group
)
{
create
(
:group
,
:public
,
owner:
user
)
}
let
(
:group
)
{
create
(
:group
,
:public
)
}
let
(
:ext_group
)
{
create
(
:group
,
:public
)
}
let
(
:epic
)
{
create
(
:epic
,
group:
group
,
author:
user
)
}
let!
(
:epic_note
)
{
create
(
:note
,
noteable:
epic
,
project:
project
,
author:
user
)
}
before
do
group
.
add_
develop
er
(
user
)
group
.
add_
own
er
(
user
)
stub_licensed_features
(
epics:
true
)
end
...
...
spec/services/groups/nested_create_service_spec.rb
View file @
471457d4
...
...
@@ -59,8 +59,11 @@ describe Groups::NestedCreateService do
describe
"#execute"
do
it
'returns the group if it already existed'
do
parent
=
create
(
:group
,
path:
'a-group'
,
owner:
user
)
child
=
create
(
:group
,
path:
'a-sub-group'
,
parent:
parent
,
owner:
user
)
parent
=
create
(
:group
,
path:
'a-group'
)
child
=
create
(
:group
,
path:
'a-sub-group'
,
parent:
parent
)
parent
.
add_owner
(
user
)
child
.
add_owner
(
user
)
expect
(
service
.
execute
).
to
eq
(
child
)
end
...
...
spec/support/controllers/githubish_import_controller_shared_examples.rb
View file @
471457d4
...
...
@@ -56,7 +56,7 @@ shared_examples 'a GitHub-ish import controller: GET status' do
end
it
"assigns variables"
do
project
=
create
(
:project
,
import_type:
provider
,
creator_id:
user
.
id
)
project
=
create
(
:project
,
import_type:
provider
,
namespace:
user
.
namespace
)
stub_client
(
repos:
[
repo
,
org_repo
],
orgs:
[
org
],
org_repos:
[
org_repo
])
get
:status
...
...
@@ -69,7 +69,7 @@ shared_examples 'a GitHub-ish import controller: GET status' do
end
it
"does not show already added project"
do
project
=
create
(
:project
,
import_type:
provider
,
creator_id:
user
.
id
,
import_source:
'asd/vim'
)
project
=
create
(
:project
,
import_type:
provider
,
namespace:
user
.
namespace
,
import_source:
'asd/vim'
)
stub_client
(
repos:
[
repo
],
orgs:
[])
get
:status
...
...
@@ -257,11 +257,12 @@ shared_examples 'a GitHub-ish import controller: POST create' do
end
context
'user has chosen an existing nested namespace and name for the project'
,
:postgresql
do
let
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
,
owner:
user
)
}
let
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
)
}
let
(
:nested_namespace
)
{
create
(
:group
,
name:
'bar'
,
parent:
parent_namespace
)
}
let
(
:test_name
)
{
'test_name'
}
before
do
parent_namespace
.
add_owner
(
user
)
nested_namespace
.
add_owner
(
user
)
end
...
...
@@ -307,7 +308,7 @@ shared_examples 'a GitHub-ish import controller: POST create' do
context
'user has chosen existent and non-existent nested namespaces and name for the project'
,
:postgresql
do
let
(
:test_name
)
{
'test_name'
}
let!
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
,
owner:
user
)
}
let!
(
:parent_namespace
)
{
create
(
:group
,
name:
'foo'
)
}
before
do
parent_namespace
.
add_owner
(
user
)
...
...
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