Commit 4a072be2d775d5ce59573cfb447ddab940854d54
1 parent
13155362
Exists in
master
and in
4 other branches
API: commits belong to project repository
Showing
8 changed files
with
77 additions
and
102 deletions
Show diff stats
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. |
lib/api.rb
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) |