Commit 4a072be2 authored by Nihad Abbasov's avatar Nihad Abbasov

API: commits belong to project repository

parent 13155362
## List Commits
Get a list of project commits.
```
GET /projects/:id/commits
```
Parameters:
+ `id` (required) - The ID or code name of a project
+ `ref_name` (optional) - branch/tag name
+ `page` (optional)
+ `per_page` (optional)
```json
[
{
"id": "ed899a2f4b50b4370feeea94676502b42383c746",
"short_id": "ed899a2f4b5",
"title": "Replace sanitize with escape once",
"author_name": "Dmitriy Zaporozhets",
"author_email": "dzaporozhets@sphereconsultinginc.com",
"created_at": "2012-09-20T11:50:22+03:00"
},
{
"id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
"short_id": "6104942438c",
"title": "Sanitize for network graph",
"author_name": "randx",
"author_email": "dmitriy.zaporozhets@gmail.com",
"created_at": "2012-09-20T09:06:12+03:00"
}
]
```
...@@ -355,6 +355,40 @@ Parameters: ...@@ -355,6 +355,40 @@ Parameters:
] ]
``` ```
## Project repository commits
Get a list of repository commits in a project.
```
GET /projects/:id/repository/commits
```
Parameters:
+ `id` (required) - The ID or code name of a project
+ `ref_name` (optional) - The name of a repository branch or tag
```json
[
{
"id": "ed899a2f4b50b4370feeea94676502b42383c746",
"short_id": "ed899a2f4b5",
"title": "Replace sanitize with escape once",
"author_name": "Dmitriy Zaporozhets",
"author_email": "dzaporozhets@sphereconsultinginc.com",
"created_at": "2012-09-20T11:50:22+03:00"
},
{
"id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
"short_id": "6104942438c",
"title": "Sanitize for network graph",
"author_name": "randx",
"author_email": "dmitriy.zaporozhets@gmail.com",
"created_at": "2012-09-20T09:06:12+03:00"
}
]
```
## Raw blob content ## Raw blob content
Get the raw file contents for a file. Get the raw file contents for a file.
......
...@@ -19,6 +19,5 @@ module Gitlab ...@@ -19,6 +19,5 @@ module Gitlab
mount Milestones mount Milestones
mount Keys mount Keys
mount Session mount Session
mount Commits
end end
end end
module Gitlab
# Commits API
class Commits < Grape::API
before { authenticate! }
resource :projects do
# Get a list of project commits
#
# Parameters:
# id (required) - The ID or code name of a project
# ref_name (optional) - Name of branch or tag
# page (optional) - default is 0
# per_page (optional) - default is 20
# Example Request:
# GET /projects/:id/commits
get ":id/commits" do
authorize! :download_code, user_project
page = params[:page] || 0
per_page = params[:per_page] || 20
ref = params[:ref_name] || user_project.try(:default_branch) || 'master'
commits = user_project.commits(ref, nil, per_page, page * per_page)
present CommitDecorator.decorate(commits), with: Entities::Commit
end
end
end
end
...@@ -17,11 +17,6 @@ module Gitlab ...@@ -17,11 +17,6 @@ module Gitlab
expose :id, :url expose :id, :url
end end
class Commit < Grape::Entity
expose :id, :short_id, :title,
:author_name, :author_email, :created_at
end
class Project < Grape::Entity class Project < Grape::Entity
expose :id, :code, :name, :description, :path, :default_branch expose :id, :code, :name, :description, :path, :default_branch
expose :owner, using: Entities::UserBasic expose :owner, using: Entities::UserBasic
...@@ -39,6 +34,10 @@ module Gitlab ...@@ -39,6 +34,10 @@ module Gitlab
expose :name, :commit expose :name, :commit
end end
class RepoCommit < Grape::Entity
expose :id, :short_id, :title, :author_name, :author_email, :created_at
end
class ProjectSnippet < Grape::Entity class ProjectSnippet < Grape::Entity
expose :id, :title, :file_name expose :id, :title, :file_name
expose :author, using: Entities::UserBasic expose :author, using: Entities::UserBasic
......
...@@ -211,6 +211,24 @@ module Gitlab ...@@ -211,6 +211,24 @@ module Gitlab
present user_project.repo.tags.sort_by(&:name).reverse, with: Entities::RepoObject present user_project.repo.tags.sort_by(&:name).reverse, with: Entities::RepoObject
end end
# Get a project repository commits
#
# Parameters:
# id (required) - The ID or code name of a project
# ref_name (optional) - The name of a repository branch or tag
# 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
ref = params[:ref_name] || user_project.try(:default_branch) || 'master'
commits = user_project.commits(ref, nil, per_page, page * per_page)
present CommitDecorator.decorate(commits), with: Entities::RepoCommit
end
# Get a project snippet # Get a project snippet
# #
# Parameters: # Parameters:
......
require 'spec_helper'
describe Gitlab::API do
include ApiHelpers
let(:user) { Factory :user }
let!(:project) { Factory :project, owner: user }
describe "GET /projects/:id/commits" do
context "authorized user" do
before { project.add_access(user, :read) }
it "should return project commits" do
get api("/projects/#{project.code}/commits", user)
response.status.should == 200
json_response.should be_an Array
json_response.first['id'].should == project.commit.id
end
end
context "unauthorized user" do
it "should return project commits" do
get api("/projects/#{project.code}/commits")
response.status.should == 401
end
end
end
end
...@@ -199,6 +199,27 @@ describe Gitlab::API do ...@@ -199,6 +199,27 @@ describe Gitlab::API do
end end
end end
describe "GET /projects/:id/repository/commits" do
context "authorized user" do
before { project.add_access(user2, :read) }
it "should return project commits" do
get api("/projects/#{project.code}/repository/commits", user)
response.status.should == 200
json_response.should be_an Array
json_response.first['id'].should == project.commit.id
end
end
context "unauthorized user" do
it "should not return project commits" do
get api("/projects/#{project.code}/repository/commits")
response.status.should == 401
end
end
end
describe "GET /projects/:id/snippets/:snippet_id" do describe "GET /projects/:id/snippets/:snippet_id" do
it "should return a project snippet" do it "should return a project snippet" do
get api("/projects/#{project.code}/snippets/#{snippet.id}", user) get api("/projects/#{project.code}/snippets/#{snippet.id}", user)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment