Commit c8e3d319 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge pull request #4892 from Aigeruth/feature/api-add-diff

Feature: get the diff of a commit via API.
parents 45c39250 d139cc6b
......@@ -239,6 +239,34 @@ Parameters:
]
```
## Get the diff of a commit
Get the diff of a commit in a project.
```
GET /projects/:id/repository/commit/:sha
```
Parameters:
+ `id` (required) - The ID of a project
+ `sha` (required) - The name of a repository branch or tag or if not given the default branch
```json
[
{
"diff": "--- a/doc/update/5.4-to-6.0.md\n+++ b/doc/update/5.4-to-6.0.md\n@@ -71,6 +71,8 @@\n sudo -u git -H bundle exec rake migrate_keys RAILS_ENV=production\n sudo -u git -H bundle exec rake migrate_inline_notes RAILS_ENV=production\n \n+sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production\n+\n ```\n \n ### 6. Update config files",
"new_path": "doc/update/5.4-to-6.0.md",
"old_path": "doc/update/5.4-to-6.0.md",
"a_mode": null,
"b_mode": "100644",
"new_file": false,
"renamed_file": false,
"deleted_file": false
}
]
```
## List repository tree
Get a list of repository files and directories in a project.
......
......@@ -102,6 +102,20 @@ module API
present commits, with: Entities::RepoCommit
end
# Get a specific commit of a project
#
# Parameters:
# id (required) - The ID of a project
# sha (required) - The commit or branch name
# Example Request:
# GET /projects/:id/repository/commit/:sha
get ":id/repository/commit/:sha" do
authorize! :download_code, user_project
sha = params[:sha]
result = CommitLoadContext.new(user_project, current_user, {id: sha}).execute
result[:commit].diffs
end
# Get a project repository tree
#
# Parameters:
......
......@@ -112,6 +112,28 @@ describe API::API do
end
end
describe "GET /projects:id/repository/commit/:sha" do
context "authorized user" do
before { project.team << [user2, :reporter] }
it "should return the diff of the selected commit" do
get api("/projects/#{project.id}/repository/commit/#{project.repository.commit.id}", user)
response.status.should == 200
json_response.should be_an Array
json_response.length.should >= 1
json_response.first.keys.should include "diff"
end
end
context "unauthorized user" do
it "should not return the diff of the selected commit" do
get api("/projects/#{project.id}/repository/commit/#{project.repository.commit.id}")
response.status.should == 401
end
end
end
describe "GET /projects/:id/repository/tree" do
context "authorized user" do
before { project.team << [user2, :reporter] }
......
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