BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
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
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
268 additions
and
235 deletions
+268
-235
api.rb
lib/api/api.rb
+1
-0
projects.rb
lib/api/projects.rb
+0
-115
repositories.rb
lib/api/repositories.rb
+133
-0
projects_spec.rb
spec/requests/api/projects_spec.rb
+0
-120
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