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
068cf2f4
Commit
068cf2f4
authored
May 23, 2013
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
split repositories and projects api
parent
bbaa0fcc
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
268 additions
and
235 deletions
+268
-235
lib/api/api.rb
lib/api/api.rb
+1
-0
lib/api/projects.rb
lib/api/projects.rb
+0
-115
lib/api/repositories.rb
lib/api/repositories.rb
+133
-0
spec/requests/api/projects_spec.rb
spec/requests/api/projects_spec.rb
+0
-120
spec/requests/api/repositories_spec.rb
spec/requests/api/repositories_spec.rb
+134
-0
No files found.
lib/api/api.rb
View file @
068cf2f4
...
...
@@ -27,6 +27,7 @@ module API
mount
Groups
mount
Users
mount
Projects
mount
Repositories
mount
Issues
mount
Milestones
mount
Session
...
...
lib/api/projects.rb
View file @
068cf2f4
...
...
@@ -286,95 +286,6 @@ module API
end
end
# Get a project repository branches
#
# Parameters:
# id (required) - The ID of a project
# Example Request:
# GET /projects/:id/repository/branches
get
":id/repository/branches"
do
present
user_project
.
repo
.
heads
.
sort_by
(
&
:name
),
with:
Entities
::
RepoObject
,
project:
user_project
end
# Get a single branch
#
# Parameters:
# id (required) - The ID of a project
# branch (required) - The name of the branch
# Example Request:
# GET /projects/:id/repository/branches/:branch
get
":id/repository/branches/:branch"
do
@branch
=
user_project
.
repo
.
heads
.
find
{
|
item
|
item
.
name
==
params
[
:branch
]
}
not_found!
(
"Branch does not exist"
)
if
@branch
.
nil?
present
@branch
,
with:
Entities
::
RepoObject
,
project:
user_project
end
# Protect a single branch
#
# Parameters:
# id (required) - The ID of a project
# branch (required) - The name of the branch
# Example Request:
# PUT /projects/:id/repository/branches/:branch/protect
put
":id/repository/branches/:branch/protect"
do
@branch
=
user_project
.
repo
.
heads
.
find
{
|
item
|
item
.
name
==
params
[
:branch
]
}
not_found!
unless
@branch
protected
=
user_project
.
protected_branches
.
find_by_name
(
@branch
.
name
)
unless
protected
user_project
.
protected_branches
.
create
(
name:
@branch
.
name
)
end
present
@branch
,
with:
Entities
::
RepoObject
,
project:
user_project
end
# Unprotect a single branch
#
# Parameters:
# id (required) - The ID of a project
# branch (required) - The name of the branch
# Example Request:
# PUT /projects/:id/repository/branches/:branch/unprotect
put
":id/repository/branches/:branch/unprotect"
do
@branch
=
user_project
.
repo
.
heads
.
find
{
|
item
|
item
.
name
==
params
[
:branch
]
}
not_found!
unless
@branch
protected
=
user_project
.
protected_branches
.
find_by_name
(
@branch
.
name
)
if
protected
protected
.
destroy
end
present
@branch
,
with:
Entities
::
RepoObject
,
project:
user_project
end
# Get a project repository tags
#
# Parameters:
# id (required) - The ID of a project
# Example Request:
# GET /projects/:id/repository/tags
get
":id/repository/tags"
do
present
user_project
.
repo
.
tags
.
sort_by
(
&
:name
).
reverse
,
with:
Entities
::
RepoObject
end
# Get a project repository commits
#
# Parameters:
# id (required) - The ID of a project
# ref_name (optional) - The name of a repository branch or tag, if not given the default branch is used
# Example Request:
# GET /projects/:id/repository/commits
get
":id/repository/commits"
do
authorize!
:download_code
,
user_project
page
=
params
[
:page
]
||
0
per_page
=
(
params
[
:per_page
]
||
20
).
to_i
ref
=
params
[
:ref_name
]
||
user_project
.
try
(
:default_branch
)
||
'master'
commits
=
user_project
.
repository
.
commits
(
ref
,
nil
,
per_page
,
page
*
per_page
)
present
commits
,
with:
Entities
::
RepoCommit
end
# Get a project snippets
#
# Parameters:
...
...
@@ -479,32 +390,6 @@ module API
present
@snippet
.
content
end
# Get a raw file contents
#
# Parameters:
# id (required) - The ID of a project
# sha (required) - The commit or branch name
# filepath (required) - The path to the file to display
# Example Request:
# GET /projects/:id/repository/commits/:sha/blob
get
":id/repository/commits/:sha/blob"
do
authorize!
:download_code
,
user_project
required_attributes!
[
:filepath
]
ref
=
params
[
:sha
]
repo
=
user_project
.
repository
commit
=
repo
.
commit
(
ref
)
not_found!
"Commit"
unless
commit
blob
=
Gitlab
::
Git
::
Blob
.
new
(
repo
,
commit
.
id
,
ref
,
params
[
:filepath
])
not_found!
"File"
unless
blob
.
exists?
content_type
blob
.
mime_type
present
blob
.
data
end
# Get a specific project's keys
#
# Example Request:
...
...
lib/api/repositories.rb
0 → 100644
View file @
068cf2f4
module
API
# Projects API
class
Repositories
<
Grape
::
API
before
{
authenticate!
}
resource
:projects
do
helpers
do
def
handle_project_member_errors
(
errors
)
if
errors
[
:project_access
].
any?
error!
(
errors
[
:project_access
],
422
)
end
not_found!
end
end
# Get a project repository branches
#
# Parameters:
# id (required) - The ID of a project
# Example Request:
# GET /projects/:id/repository/branches
get
":id/repository/branches"
do
present
user_project
.
repo
.
heads
.
sort_by
(
&
:name
),
with:
Entities
::
RepoObject
,
project:
user_project
end
# Get a single branch
#
# Parameters:
# id (required) - The ID of a project
# branch (required) - The name of the branch
# Example Request:
# GET /projects/:id/repository/branches/:branch
get
":id/repository/branches/:branch"
do
@branch
=
user_project
.
repo
.
heads
.
find
{
|
item
|
item
.
name
==
params
[
:branch
]
}
not_found!
(
"Branch does not exist"
)
if
@branch
.
nil?
present
@branch
,
with:
Entities
::
RepoObject
,
project:
user_project
end
# Protect a single branch
#
# Parameters:
# id (required) - The ID of a project
# branch (required) - The name of the branch
# Example Request:
# PUT /projects/:id/repository/branches/:branch/protect
put
":id/repository/branches/:branch/protect"
do
@branch
=
user_project
.
repo
.
heads
.
find
{
|
item
|
item
.
name
==
params
[
:branch
]
}
not_found!
unless
@branch
protected
=
user_project
.
protected_branches
.
find_by_name
(
@branch
.
name
)
unless
protected
user_project
.
protected_branches
.
create
(
name:
@branch
.
name
)
end
present
@branch
,
with:
Entities
::
RepoObject
,
project:
user_project
end
# Unprotect a single branch
#
# Parameters:
# id (required) - The ID of a project
# branch (required) - The name of the branch
# Example Request:
# PUT /projects/:id/repository/branches/:branch/unprotect
put
":id/repository/branches/:branch/unprotect"
do
@branch
=
user_project
.
repo
.
heads
.
find
{
|
item
|
item
.
name
==
params
[
:branch
]
}
not_found!
unless
@branch
protected
=
user_project
.
protected_branches
.
find_by_name
(
@branch
.
name
)
if
protected
protected
.
destroy
end
present
@branch
,
with:
Entities
::
RepoObject
,
project:
user_project
end
# Get a project repository tags
#
# Parameters:
# id (required) - The ID of a project
# Example Request:
# GET /projects/:id/repository/tags
get
":id/repository/tags"
do
present
user_project
.
repo
.
tags
.
sort_by
(
&
:name
).
reverse
,
with:
Entities
::
RepoObject
end
# Get a project repository commits
#
# Parameters:
# id (required) - The ID of a project
# ref_name (optional) - The name of a repository branch or tag, if not given the default branch is used
# Example Request:
# GET /projects/:id/repository/commits
get
":id/repository/commits"
do
authorize!
:download_code
,
user_project
page
=
params
[
:page
]
||
0
per_page
=
(
params
[
:per_page
]
||
20
).
to_i
ref
=
params
[
:ref_name
]
||
user_project
.
try
(
:default_branch
)
||
'master'
commits
=
user_project
.
repository
.
commits
(
ref
,
nil
,
per_page
,
page
*
per_page
)
present
commits
,
with:
Entities
::
RepoCommit
end
# Get a raw file contents
#
# Parameters:
# id (required) - The ID of a project
# sha (required) - The commit or branch name
# filepath (required) - The path to the file to display
# Example Request:
# GET /projects/:id/repository/commits/:sha/blob
get
":id/repository/commits/:sha/blob"
do
authorize!
:download_code
,
user_project
required_attributes!
[
:filepath
]
ref
=
params
[
:sha
]
repo
=
user_project
.
repository
commit
=
repo
.
commit
(
ref
)
not_found!
"Commit"
unless
commit
blob
=
Gitlab
::
Git
::
Blob
.
new
(
repo
,
commit
.
id
,
ref
,
params
[
:filepath
])
not_found!
"File"
unless
blob
.
exists?
content_type
blob
.
mime_type
present
blob
.
data
end
end
end
end
spec/requests/api/projects_spec.rb
View file @
068cf2f4
...
...
@@ -173,75 +173,6 @@ describe API::API do
end
end
describe
"GET /projects/:id/repository/branches"
do
it
"should return an array of project branches"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/branches"
,
user
)
response
.
status
.
should
==
200
json_response
.
should
be_an
Array
json_response
.
first
[
'name'
].
should
==
project
.
repo
.
heads
.
sort_by
(
&
:name
).
first
.
name
end
end
describe
"GET /projects/:id/repository/branches/:branch"
do
it
"should return the branch information for a single branch"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design"
,
user
)
response
.
status
.
should
==
200
json_response
[
'name'
].
should
==
'new_design'
json_response
[
'commit'
][
'id'
].
should
==
'621491c677087aa243f165eab467bfdfbee00be1'
json_response
[
'protected'
].
should
==
false
end
it
"should return a 404 error if branch is not available"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/branches/unknown"
,
user
)
response
.
status
.
should
==
404
end
end
describe
"PUT /projects/:id/repository/branches/:branch/protect"
do
it
"should protect a single branch"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/protect"
,
user
)
response
.
status
.
should
==
200
json_response
[
'name'
].
should
==
'new_design'
json_response
[
'commit'
][
'id'
].
should
==
'621491c677087aa243f165eab467bfdfbee00be1'
json_response
[
'protected'
].
should
==
true
end
it
"should return a 404 error if branch not found"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/unknown/protect"
,
user
)
response
.
status
.
should
==
404
end
it
"should return success when protect branch again"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/protect"
,
user
)
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/protect"
,
user
)
response
.
status
.
should
==
200
end
end
describe
"PUT /projects/:id/repository/branches/:branch/unprotect"
do
it
"should unprotect a single branch"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/unprotect"
,
user
)
response
.
status
.
should
==
200
json_response
[
'name'
].
should
==
'new_design'
json_response
[
'commit'
][
'id'
].
should
==
'621491c677087aa243f165eab467bfdfbee00be1'
json_response
[
'protected'
].
should
==
false
end
it
"should return success when unprotect branch"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/unknown/unprotect"
,
user
)
response
.
status
.
should
==
404
end
it
"should return success when unprotect branch again"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/unprotect"
,
user
)
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/unprotect"
,
user
)
response
.
status
.
should
==
200
end
end
describe
"GET /projects/:id/members"
do
it
"should return project team members"
do
get
api
(
"/projects/
#{
project
.
id
}
/members"
,
user
)
...
...
@@ -491,35 +422,6 @@ describe API::API do
end
end
describe
"GET /projects/:id/repository/tags"
do
it
"should return an array of project tags"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/tags"
,
user
)
response
.
status
.
should
==
200
json_response
.
should
be_an
Array
json_response
.
first
[
'name'
].
should
==
project
.
repo
.
tags
.
sort_by
(
&
:name
).
reverse
.
first
.
name
end
end
describe
"GET /projects/:id/repository/commits"
do
context
"authorized user"
do
before
{
project
.
team
<<
[
user2
,
:reporter
]
}
it
"should return project commits"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits"
,
user
)
response
.
status
.
should
==
200
json_response
.
should
be_an
Array
json_response
.
first
[
'id'
].
should
==
project
.
repository
.
commit
.
id
end
end
context
"unauthorized user"
do
it
"should not return project commits"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits"
)
response
.
status
.
should
==
401
end
end
end
describe
"GET /projects/:id/snippets"
do
it
"should return an array of project snippets"
do
...
...
@@ -613,28 +515,6 @@ describe API::API do
end
end
describe
"GET /projects/:id/repository/commits/:sha/blob"
do
it
"should get the raw file contents"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits/master/blob?filepath=README.md"
,
user
)
response
.
status
.
should
==
200
end
it
"should return 404 for invalid branch_name"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits/invalid_branch_name/blob?filepath=README.md"
,
user
)
response
.
status
.
should
==
404
end
it
"should return 404 for invalid file"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits/master/blob?filepath=README.invalid"
,
user
)
response
.
status
.
should
==
404
end
it
"should return a 400 error if filepath is missing"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits/master/blob"
,
user
)
response
.
status
.
should
==
400
end
end
describe
:deploy_keys
do
let
(
:deploy_keys_project
)
{
create
(
:deploy_keys_project
,
project:
project
)
}
let
(
:deploy_key
)
{
deploy_keys_project
.
deploy_key
}
...
...
spec/requests/api/repositories_spec.rb
0 → 100644
View file @
068cf2f4
require
'spec_helper'
describe
API
::
API
do
include
ApiHelpers
before
(
:each
)
{
enable_observers
}
let
(
:user
)
{
create
(
:user
)
}
let!
(
:project
)
{
create
(
:project_with_code
,
creator_id:
user
.
id
)
}
let!
(
:users_project
)
{
create
(
:users_project
,
user:
user
,
project:
project
,
project_access:
UsersProject
::
MASTER
)
}
before
{
project
.
team
<<
[
user
,
:reporter
]
}
describe
"GET /projects/:id/repository/branches"
do
it
"should return an array of project branches"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/branches"
,
user
)
response
.
status
.
should
==
200
json_response
.
should
be_an
Array
json_response
.
first
[
'name'
].
should
==
project
.
repo
.
heads
.
sort_by
(
&
:name
).
first
.
name
end
end
describe
"GET /projects/:id/repository/branches/:branch"
do
it
"should return the branch information for a single branch"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design"
,
user
)
response
.
status
.
should
==
200
json_response
[
'name'
].
should
==
'new_design'
json_response
[
'commit'
][
'id'
].
should
==
'621491c677087aa243f165eab467bfdfbee00be1'
json_response
[
'protected'
].
should
==
false
end
it
"should return a 404 error if branch is not available"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/branches/unknown"
,
user
)
response
.
status
.
should
==
404
end
end
describe
"PUT /projects/:id/repository/branches/:branch/protect"
do
it
"should protect a single branch"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/protect"
,
user
)
response
.
status
.
should
==
200
json_response
[
'name'
].
should
==
'new_design'
json_response
[
'commit'
][
'id'
].
should
==
'621491c677087aa243f165eab467bfdfbee00be1'
json_response
[
'protected'
].
should
==
true
end
it
"should return a 404 error if branch not found"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/unknown/protect"
,
user
)
response
.
status
.
should
==
404
end
it
"should return success when protect branch again"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/protect"
,
user
)
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/protect"
,
user
)
response
.
status
.
should
==
200
end
end
describe
"PUT /projects/:id/repository/branches/:branch/unprotect"
do
it
"should unprotect a single branch"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/unprotect"
,
user
)
response
.
status
.
should
==
200
json_response
[
'name'
].
should
==
'new_design'
json_response
[
'commit'
][
'id'
].
should
==
'621491c677087aa243f165eab467bfdfbee00be1'
json_response
[
'protected'
].
should
==
false
end
it
"should return success when unprotect branch"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/unknown/unprotect"
,
user
)
response
.
status
.
should
==
404
end
it
"should return success when unprotect branch again"
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/unprotect"
,
user
)
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/new_design/unprotect"
,
user
)
response
.
status
.
should
==
200
end
end
describe
"GET /projects/:id/repository/tags"
do
it
"should return an array of project tags"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/tags"
,
user
)
response
.
status
.
should
==
200
json_response
.
should
be_an
Array
json_response
.
first
[
'name'
].
should
==
project
.
repo
.
tags
.
sort_by
(
&
:name
).
reverse
.
first
.
name
end
end
describe
"GET /projects/:id/repository/commits"
do
context
"authorized user"
do
before
{
project
.
team
<<
[
user2
,
:reporter
]
}
it
"should return project commits"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits"
,
user
)
response
.
status
.
should
==
200
json_response
.
should
be_an
Array
json_response
.
first
[
'id'
].
should
==
project
.
repository
.
commit
.
id
end
end
context
"unauthorized user"
do
it
"should not return project commits"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits"
)
response
.
status
.
should
==
401
end
end
end
describe
"GET /projects/:id/repository/commits/:sha/blob"
do
it
"should get the raw file contents"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits/master/blob?filepath=README.md"
,
user
)
response
.
status
.
should
==
200
end
it
"should return 404 for invalid branch_name"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits/invalid_branch_name/blob?filepath=README.md"
,
user
)
response
.
status
.
should
==
404
end
it
"should return 404 for invalid file"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits/master/blob?filepath=README.invalid"
,
user
)
response
.
status
.
should
==
404
end
it
"should return a 400 error if filepath is missing"
do
get
api
(
"/projects/
#{
project
.
id
}
/repository/commits/master/blob"
,
user
)
response
.
status
.
should
==
400
end
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