Commit 4a072be2d775d5ce59573cfb447ddab940854d54

Authored by Nihad Abbasov
1 parent 13155362

API: commits belong to project repository

doc/api/commits.md
@@ -1,38 +0,0 @@ @@ -1,38 +0,0 @@
1 -## List Commits  
2 -  
3 -Get a list of project commits.  
4 -  
5 -```  
6 -GET /projects/:id/commits  
7 -```  
8 -  
9 -Parameters:  
10 -  
11 -+ `id` (required) - The ID or code name of a project  
12 -+ `ref_name` (optional) - branch/tag name  
13 -+ `page` (optional)  
14 -+ `per_page` (optional)  
15 -  
16 -  
17 -```json  
18 -  
19 -[  
20 - {  
21 - "id": "ed899a2f4b50b4370feeea94676502b42383c746",  
22 - "short_id": "ed899a2f4b5",  
23 - "title": "Replace sanitize with escape once",  
24 - "author_name": "Dmitriy Zaporozhets",  
25 - "author_email": "dzaporozhets@sphereconsultinginc.com",  
26 - "created_at": "2012-09-20T11:50:22+03:00"  
27 - },  
28 - {  
29 - "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",  
30 - "short_id": "6104942438c",  
31 - "title": "Sanitize for network graph",  
32 - "author_name": "randx",  
33 - "author_email": "dmitriy.zaporozhets@gmail.com",  
34 - "created_at": "2012-09-20T09:06:12+03:00"  
35 - }  
36 -]  
37 -  
38 -```  
doc/api/projects.md
@@ -355,6 +355,40 @@ Parameters: @@ -355,6 +355,40 @@ Parameters:
355 ] 355 ]
356 ``` 356 ```
357 357
  358 +## Project repository commits
  359 +
  360 +Get a list of repository commits in a project.
  361 +
  362 +```
  363 +GET /projects/:id/repository/commits
  364 +```
  365 +
  366 +Parameters:
  367 +
  368 ++ `id` (required) - The ID or code name of a project
  369 ++ `ref_name` (optional) - The name of a repository branch or tag
  370 +
  371 +```json
  372 +[
  373 + {
  374 + "id": "ed899a2f4b50b4370feeea94676502b42383c746",
  375 + "short_id": "ed899a2f4b5",
  376 + "title": "Replace sanitize with escape once",
  377 + "author_name": "Dmitriy Zaporozhets",
  378 + "author_email": "dzaporozhets@sphereconsultinginc.com",
  379 + "created_at": "2012-09-20T11:50:22+03:00"
  380 + },
  381 + {
  382 + "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
  383 + "short_id": "6104942438c",
  384 + "title": "Sanitize for network graph",
  385 + "author_name": "randx",
  386 + "author_email": "dmitriy.zaporozhets@gmail.com",
  387 + "created_at": "2012-09-20T09:06:12+03:00"
  388 + }
  389 +]
  390 +```
  391 +
358 ## Raw blob content 392 ## Raw blob content
359 393
360 Get the raw file contents for a file. 394 Get the raw file contents for a file.
@@ -19,6 +19,5 @@ module Gitlab @@ -19,6 +19,5 @@ module Gitlab
19 mount Milestones 19 mount Milestones
20 mount Keys 20 mount Keys
21 mount Session 21 mount Session
22 - mount Commits  
23 end 22 end
24 end 23 end
lib/api/commits.rb
@@ -1,29 +0,0 @@ @@ -1,29 +0,0 @@
1 -module Gitlab  
2 - # Commits API  
3 - class Commits < Grape::API  
4 - before { authenticate! }  
5 -  
6 - resource :projects do  
7 - # Get a list of project commits  
8 - #  
9 - # Parameters:  
10 - # id (required) - The ID or code name of a project  
11 - # ref_name (optional) - Name of branch or tag  
12 - # page (optional) - default is 0  
13 - # per_page (optional) - default is 20  
14 - # Example Request:  
15 - # GET /projects/:id/commits  
16 - get ":id/commits" do  
17 - authorize! :download_code, user_project  
18 -  
19 - page = params[:page] || 0  
20 - per_page = params[:per_page] || 20  
21 - ref = params[:ref_name] || user_project.try(:default_branch) || 'master'  
22 -  
23 - commits = user_project.commits(ref, nil, per_page, page * per_page)  
24 -  
25 - present CommitDecorator.decorate(commits), with: Entities::Commit  
26 - end  
27 - end  
28 - end  
29 -end  
lib/api/entities.rb
@@ -17,11 +17,6 @@ module Gitlab @@ -17,11 +17,6 @@ module Gitlab
17 expose :id, :url 17 expose :id, :url
18 end 18 end
19 19
20 - class Commit < Grape::Entity  
21 - expose :id, :short_id, :title,  
22 - :author_name, :author_email, :created_at  
23 - end  
24 -  
25 class Project < Grape::Entity 20 class Project < Grape::Entity
26 expose :id, :code, :name, :description, :path, :default_branch 21 expose :id, :code, :name, :description, :path, :default_branch
27 expose :owner, using: Entities::UserBasic 22 expose :owner, using: Entities::UserBasic
@@ -39,6 +34,10 @@ module Gitlab @@ -39,6 +34,10 @@ module Gitlab
39 expose :name, :commit 34 expose :name, :commit
40 end 35 end
41 36
  37 + class RepoCommit < Grape::Entity
  38 + expose :id, :short_id, :title, :author_name, :author_email, :created_at
  39 + end
  40 +
42 class ProjectSnippet < Grape::Entity 41 class ProjectSnippet < Grape::Entity
43 expose :id, :title, :file_name 42 expose :id, :title, :file_name
44 expose :author, using: Entities::UserBasic 43 expose :author, using: Entities::UserBasic
lib/api/projects.rb
@@ -211,6 +211,24 @@ module Gitlab @@ -211,6 +211,24 @@ module Gitlab
211 present user_project.repo.tags.sort_by(&:name).reverse, with: Entities::RepoObject 211 present user_project.repo.tags.sort_by(&:name).reverse, with: Entities::RepoObject
212 end 212 end
213 213
  214 + # Get a project repository commits
  215 + #
  216 + # Parameters:
  217 + # id (required) - The ID or code name of a project
  218 + # ref_name (optional) - The name of a repository branch or tag
  219 + # Example Request:
  220 + # GET /projects/:id/repository/commits
  221 + get ":id/repository/commits" do
  222 + authorize! :download_code, user_project
  223 +
  224 + page = params[:page] || 0
  225 + per_page = params[:per_page] || 20
  226 + ref = params[:ref_name] || user_project.try(:default_branch) || 'master'
  227 +
  228 + commits = user_project.commits(ref, nil, per_page, page * per_page)
  229 + present CommitDecorator.decorate(commits), with: Entities::RepoCommit
  230 + end
  231 +
214 # Get a project snippet 232 # Get a project snippet
215 # 233 #
216 # Parameters: 234 # Parameters:
spec/requests/api/commits_spec.rb
@@ -1,29 +0,0 @@ @@ -1,29 +0,0 @@
1 -require 'spec_helper'  
2 -  
3 -describe Gitlab::API do  
4 - include ApiHelpers  
5 -  
6 - let(:user) { Factory :user }  
7 - let!(:project) { Factory :project, owner: user }  
8 -  
9 - describe "GET /projects/:id/commits" do  
10 - context "authorized user" do  
11 - before { project.add_access(user, :read) }  
12 -  
13 - it "should return project commits" do  
14 - get api("/projects/#{project.code}/commits", user)  
15 - response.status.should == 200  
16 -  
17 - json_response.should be_an Array  
18 - json_response.first['id'].should == project.commit.id  
19 - end  
20 - end  
21 -  
22 - context "unauthorized user" do  
23 - it "should return project commits" do  
24 - get api("/projects/#{project.code}/commits")  
25 - response.status.should == 401  
26 - end  
27 - end  
28 - end  
29 -end  
spec/requests/api/projects_spec.rb
@@ -199,6 +199,27 @@ describe Gitlab::API do @@ -199,6 +199,27 @@ describe Gitlab::API do
199 end 199 end
200 end 200 end
201 201
  202 + describe "GET /projects/:id/repository/commits" do
  203 + context "authorized user" do
  204 + before { project.add_access(user2, :read) }
  205 +
  206 + it "should return project commits" do
  207 + get api("/projects/#{project.code}/repository/commits", user)
  208 + response.status.should == 200
  209 +
  210 + json_response.should be_an Array
  211 + json_response.first['id'].should == project.commit.id
  212 + end
  213 + end
  214 +
  215 + context "unauthorized user" do
  216 + it "should not return project commits" do
  217 + get api("/projects/#{project.code}/repository/commits")
  218 + response.status.should == 401
  219 + end
  220 + end
  221 + end
  222 +
202 describe "GET /projects/:id/snippets/:snippet_id" do 223 describe "GET /projects/:id/snippets/:snippet_id" do
203 it "should return a project snippet" do 224 it "should return a project snippet" do
204 get api("/projects/#{project.code}/snippets/#{snippet.id}", user) 225 get api("/projects/#{project.code}/snippets/#{snippet.id}", user)