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
33124b4b
Commit
33124b4b
authored
Jul 08, 2016
by
Robert Schilling
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
API: Expose shared projects in a group
parent
0530ec5e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
193 additions
and
4 deletions
+193
-4
CHANGELOG
CHANGELOG
+1
-1
doc/api/groups.md
doc/api/groups.md
+174
-1
lib/api/entities.rb
lib/api/entities.rb
+1
-0
spec/requests/api/groups_spec.rb
spec/requests/api/groups_spec.rb
+17
-2
No files found.
CHANGELOG
View file @
33124b4b
...
@@ -27,7 +27,7 @@ v 8.10.0 (unreleased)
...
@@ -27,7 +27,7 @@ v 8.10.0 (unreleased)
- Add notification settings dropdown for groups
- Add notification settings dropdown for groups
- Allow importing from Github using Personal Access Tokens. (Eric K Idema)
- Allow importing from Github using Personal Access Tokens. (Eric K Idema)
- API: Todos !3188 (Robert Schilling)
- API: Todos !3188 (Robert Schilling)
- API: Expose shared groups for projects
!5148
(Robert Schilling)
- API: Expose shared groups for projects
and shared projects for groups !5050
(Robert Schilling)
- Add "Enabled Git access protocols" to Application Settings
- Add "Enabled Git access protocols" to Application Settings
- Fix user creation with stronger minimum password requirements !4054 (nathan-pmt)
- Fix user creation with stronger minimum password requirements !4054 (nathan-pmt)
- PipelinesFinder uses git cache data
- PipelinesFinder uses git cache data
...
...
doc/api/groups.md
View file @
33124b4b
...
@@ -99,7 +99,180 @@ GET /groups/:id
...
@@ -99,7 +99,180 @@ GET /groups/:id
Parameters:
Parameters:
-
`id`
(required) - The ID or path of a group
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
|
`id`
| integer/string | yes | The ID or path of a group |
```
bash
curl
-H
"PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK"
https://gitlab.example.com/api/v3/groups/4
```
Example response:
```
json
{
"id"
:
4
,
"name"
:
"Twitter"
,
"path"
:
"twitter"
,
"description"
:
"Aliquid qui quis dignissimos distinctio ut commodi voluptas est."
,
"visibility_level"
:
20
,
"avatar_url"
:
null
,
"web_url"
:
"https://gitlab.example.com/groups/twitter"
,
"projects"
:
[
{
"id"
:
7
,
"description"
:
"Voluptas veniam qui et beatae voluptas doloremque explicabo facilis."
,
"default_branch"
:
"master"
,
"tag_list"
:
[],
"public"
:
true
,
"archived"
:
false
,
"visibility_level"
:
20
,
"ssh_url_to_repo"
:
"git@gitlab.example.com:twitter/typeahead-js.git"
,
"http_url_to_repo"
:
"https://gitlab.example.com/twitter/typeahead-js.git"
,
"web_url"
:
"https://gitlab.example.com/twitter/typeahead-js"
,
"name"
:
"Typeahead.Js"
,
"name_with_namespace"
:
"Twitter / Typeahead.Js"
,
"path"
:
"typeahead-js"
,
"path_with_namespace"
:
"twitter/typeahead-js"
,
"issues_enabled"
:
true
,
"merge_requests_enabled"
:
true
,
"wiki_enabled"
:
true
,
"builds_enabled"
:
true
,
"snippets_enabled"
:
false
,
"container_registry_enabled"
:
true
,
"created_at"
:
"2016-06-17T07:47:25.578Z"
,
"last_activity_at"
:
"2016-06-17T07:47:25.881Z"
,
"shared_runners_enabled"
:
true
,
"creator_id"
:
1
,
"namespace"
:
{
"id"
:
4
,
"name"
:
"Twitter"
,
"path"
:
"twitter"
,
"owner_id"
:
null
,
"created_at"
:
"2016-06-17T07:47:24.216Z"
,
"updated_at"
:
"2016-06-17T07:47:24.216Z"
,
"description"
:
"Aliquid qui quis dignissimos distinctio ut commodi voluptas est."
,
"avatar"
:
{
"url"
:
null
},
"share_with_group_lock"
:
false
,
"visibility_level"
:
20
},
"avatar_url"
:
null
,
"star_count"
:
0
,
"forks_count"
:
0
,
"open_issues_count"
:
3
,
"public_builds"
:
true
,
"shared_with_groups"
:
[]
},
{
"id"
:
6
,
"description"
:
"Aspernatur omnis repudiandae qui voluptatibus eaque."
,
"default_branch"
:
"master"
,
"tag_list"
:
[],
"public"
:
false
,
"archived"
:
false
,
"visibility_level"
:
10
,
"ssh_url_to_repo"
:
"git@gitlab.example.com:twitter/flight.git"
,
"http_url_to_repo"
:
"https://gitlab.example.com/twitter/flight.git"
,
"web_url"
:
"https://gitlab.example.com/twitter/flight"
,
"name"
:
"Flight"
,
"name_with_namespace"
:
"Twitter / Flight"
,
"path"
:
"flight"
,
"path_with_namespace"
:
"twitter/flight"
,
"issues_enabled"
:
true
,
"merge_requests_enabled"
:
true
,
"wiki_enabled"
:
true
,
"builds_enabled"
:
true
,
"snippets_enabled"
:
false
,
"container_registry_enabled"
:
true
,
"created_at"
:
"2016-06-17T07:47:24.661Z"
,
"last_activity_at"
:
"2016-06-17T07:47:24.838Z"
,
"shared_runners_enabled"
:
true
,
"creator_id"
:
1
,
"namespace"
:
{
"id"
:
4
,
"name"
:
"Twitter"
,
"path"
:
"twitter"
,
"owner_id"
:
null
,
"created_at"
:
"2016-06-17T07:47:24.216Z"
,
"updated_at"
:
"2016-06-17T07:47:24.216Z"
,
"description"
:
"Aliquid qui quis dignissimos distinctio ut commodi voluptas est."
,
"avatar"
:
{
"url"
:
null
},
"share_with_group_lock"
:
false
,
"visibility_level"
:
20
},
"avatar_url"
:
null
,
"star_count"
:
0
,
"forks_count"
:
0
,
"open_issues_count"
:
8
,
"public_builds"
:
true
,
"shared_with_groups"
:
[]
}
],
"shared_projects"
:
[
{
"id"
:
8
,
"description"
:
"Velit eveniet provident fugiat saepe eligendi autem."
,
"default_branch"
:
"master"
,
"tag_list"
:
[],
"public"
:
false
,
"archived"
:
false
,
"visibility_level"
:
0
,
"ssh_url_to_repo"
:
"git@gitlab.example.com:h5bp/html5-boilerplate.git"
,
"http_url_to_repo"
:
"https://gitlab.example.com/h5bp/html5-boilerplate.git"
,
"web_url"
:
"https://gitlab.example.com/h5bp/html5-boilerplate"
,
"name"
:
"Html5 Boilerplate"
,
"name_with_namespace"
:
"H5bp / Html5 Boilerplate"
,
"path"
:
"html5-boilerplate"
,
"path_with_namespace"
:
"h5bp/html5-boilerplate"
,
"issues_enabled"
:
true
,
"merge_requests_enabled"
:
true
,
"wiki_enabled"
:
true
,
"builds_enabled"
:
true
,
"snippets_enabled"
:
false
,
"container_registry_enabled"
:
true
,
"created_at"
:
"2016-06-17T07:47:27.089Z"
,
"last_activity_at"
:
"2016-06-17T07:47:27.310Z"
,
"shared_runners_enabled"
:
true
,
"creator_id"
:
1
,
"namespace"
:
{
"id"
:
5
,
"name"
:
"H5bp"
,
"path"
:
"h5bp"
,
"owner_id"
:
null
,
"created_at"
:
"2016-06-17T07:47:26.621Z"
,
"updated_at"
:
"2016-06-17T07:47:26.621Z"
,
"description"
:
"Id consequatur rem vel qui doloremque saepe."
,
"avatar"
:
{
"url"
:
null
},
"share_with_group_lock"
:
false
,
"visibility_level"
:
20
},
"avatar_url"
:
null
,
"star_count"
:
0
,
"forks_count"
:
0
,
"open_issues_count"
:
4
,
"public_builds"
:
true
,
"shared_with_groups"
:
[
{
"group_id"
:
4
,
"group_name"
:
"Twitter"
,
"group_access_level"
:
30
},
{
"group_id"
:
3
,
"group_name"
:
"Gitlab Org"
,
"group_access_level"
:
10
}
]
}
]
}
```
## New group
## New group
...
...
lib/api/entities.rb
View file @
33124b4b
...
@@ -104,6 +104,7 @@ module API
...
@@ -104,6 +104,7 @@ module API
class
GroupDetail
<
Group
class
GroupDetail
<
Group
expose
:projects
,
using:
Entities
::
Project
expose
:projects
,
using:
Entities
::
Project
expose
:shared_projects
,
using:
Entities
::
Project
end
end
class
GroupMember
<
UserBasic
class
GroupMember
<
UserBasic
...
...
spec/requests/api/groups_spec.rb
View file @
33124b4b
...
@@ -49,10 +49,25 @@ describe API::API, api: true do
...
@@ -49,10 +49,25 @@ describe API::API, api: true do
describe
"GET /groups/:id"
do
describe
"GET /groups/:id"
do
context
"when authenticated as user"
do
context
"when authenticated as user"
do
it
"should return one of user1's groups"
do
it
"returns one of user1's groups"
do
project
=
create
(
:project
,
namespace:
group2
,
path:
'Foo'
)
create
(
:project_group_link
,
project:
project
,
group:
group1
)
get
api
(
"/groups/
#{
group1
.
id
}
"
,
user1
)
get
api
(
"/groups/
#{
group1
.
id
}
"
,
user1
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
json_response
[
'name'
]
==
group1
.
name
expect
(
json_response
[
'id'
]).
to
eq
(
group1
.
id
)
expect
(
json_response
[
'name'
]).
to
eq
(
group1
.
name
)
expect
(
json_response
[
'path'
]).
to
eq
(
group1
.
path
)
expect
(
json_response
[
'description'
]).
to
eq
(
group1
.
description
)
expect
(
json_response
[
'visibility_level'
]).
to
eq
(
group1
.
visibility_level
)
expect
(
json_response
[
'avatar_url'
]).
to
eq
(
group1
.
avatar_url
)
expect
(
json_response
[
'web_url'
]).
to
eq
(
group1
.
web_url
)
expect
(
json_response
[
'projects'
]).
to
be_an
Array
expect
(
json_response
[
'projects'
].
length
).
to
eq
(
2
)
expect
(
json_response
[
'shared_projects'
]).
to
be_an
Array
expect
(
json_response
[
'shared_projects'
].
length
).
to
eq
(
1
)
expect
(
json_response
[
'shared_projects'
][
0
][
'id'
]).
to
eq
(
project
.
id
)
end
end
it
"should not return a non existing group"
do
it
"should not return a non existing group"
do
...
...
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