Standardize commit diff api url, change blob api url, add get single commit
Use "/commits/:sha/diff" as opposed to "/commit/:sha", keeping in line with existing api urls (e.g. "/projects/:id", etc.) Fix 500 error resulting from a diff api call with an invalid commit hash Move "/commits/:sha/blob" to "/blobs/:sha", leaving the old path for backwards compatibility. Add ability to get a single commit via "/commits/:sha"
This commit is contained in:
parent
79f0858a18
commit
59f428dca2
3 changed files with 101 additions and 24 deletions
|
@ -239,12 +239,37 @@ Parameters:
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Get a single commit
|
||||||
|
|
||||||
|
Get a specific commit identified by the commit hash or name of a branch or tag.
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /projects/:id/repository/commits/:sha
|
||||||
|
```
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
+ `id` (required) - The ID of a project
|
||||||
|
+ `sha` (required) - The commit hash or name of a repository branch or tag
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Get the diff of a commit
|
## Get the diff of a commit
|
||||||
|
|
||||||
Get the diff of a commit in a project.
|
Get the diff of a commit in a project.
|
||||||
|
|
||||||
```
|
```
|
||||||
GET /projects/:id/repository/commit/:sha
|
GET /projects/:id/repository/commits/:sha/diff
|
||||||
```
|
```
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
@ -323,7 +348,7 @@ Parameters:
|
||||||
Get the raw file contents for a file.
|
Get the raw file contents for a file.
|
||||||
|
|
||||||
```
|
```
|
||||||
GET /projects/:id/repository/commits/:sha/blob
|
GET /projects/:id/repository/blobs/:sha
|
||||||
```
|
```
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
|
|
@ -106,13 +106,29 @@ module API
|
||||||
#
|
#
|
||||||
# Parameters:
|
# Parameters:
|
||||||
# id (required) - The ID of a project
|
# id (required) - The ID of a project
|
||||||
|
# sha (required) - The commit hash or name of a repository branch or tag
|
||||||
|
# Example Request:
|
||||||
|
# GET /projects/:id/repository/commits/:sha
|
||||||
|
get ":id/repository/commits/:sha" do
|
||||||
|
authorize! :download_code, user_project
|
||||||
|
sha = params[:sha]
|
||||||
|
commit = user_project.repository.commit(sha)
|
||||||
|
not_found! "Commit" unless commit
|
||||||
|
present commit, with: Entities::RepoCommit
|
||||||
|
end
|
||||||
|
|
||||||
|
# Get the diff for a specific commit of a project
|
||||||
|
#
|
||||||
|
# Parameters:
|
||||||
|
# id (required) - The ID of a project
|
||||||
# sha (required) - The commit or branch name
|
# sha (required) - The commit or branch name
|
||||||
# Example Request:
|
# Example Request:
|
||||||
# GET /projects/:id/repository/commit/:sha
|
# GET /projects/:id/repository/commits/:sha/diff
|
||||||
get ":id/repository/commit/:sha" do
|
get ":id/repository/commits/:sha/diff" do
|
||||||
authorize! :download_code, user_project
|
authorize! :download_code, user_project
|
||||||
sha = params[:sha]
|
sha = params[:sha]
|
||||||
result = CommitLoadContext.new(user_project, current_user, {id: sha}).execute
|
result = CommitLoadContext.new(user_project, current_user, {id: sha}).execute
|
||||||
|
not_found! "Commit" unless result[:commit]
|
||||||
result[:commit].diffs
|
result[:commit].diffs
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -148,8 +164,8 @@ module API
|
||||||
# sha (required) - The commit or branch name
|
# sha (required) - The commit or branch name
|
||||||
# filepath (required) - The path to the file to display
|
# filepath (required) - The path to the file to display
|
||||||
# Example Request:
|
# Example Request:
|
||||||
# GET /projects/:id/repository/commits/:sha/blob
|
# GET /projects/:id/repository/blobs/:sha
|
||||||
get ":id/repository/commits/:sha/blob" do
|
get [ ":id/repository/blobs/:sha", ":id/repository/commits/:sha/blob" ] do
|
||||||
authorize! :download_code, user_project
|
authorize! :download_code, user_project
|
||||||
required_attributes! [:filepath]
|
required_attributes! [:filepath]
|
||||||
|
|
||||||
|
|
|
@ -112,23 +112,51 @@ describe API::API do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /projects:id/repository/commit/:sha" do
|
describe "GET /projects:id/repository/commits/:sha" do
|
||||||
|
context "authorized user" do
|
||||||
|
it "should return a commit by sha" do
|
||||||
|
get api("/projects/#{project.id}/repository/commits/#{project.repository.commit.id}", user)
|
||||||
|
response.status.should == 200
|
||||||
|
json_response['id'].should == project.repository.commit.id
|
||||||
|
json_response['title'].should == project.repository.commit.title
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return a 404 error if not found" do
|
||||||
|
get api("/projects/#{project.id}/repository/commits/invalid_sha", user)
|
||||||
|
response.status.should == 404
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "unauthorized user" do
|
||||||
|
it "should not return the selected commit" do
|
||||||
|
get api("/projects/#{project.id}/repository/commits/#{project.repository.commit.id}")
|
||||||
|
response.status.should == 401
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "GET /projects:id/repository/commits/:sha/diff" do
|
||||||
context "authorized user" do
|
context "authorized user" do
|
||||||
before { project.team << [user2, :reporter] }
|
before { project.team << [user2, :reporter] }
|
||||||
|
|
||||||
it "should return the diff of the selected commit" do
|
it "should return the diff of the selected commit" do
|
||||||
get api("/projects/#{project.id}/repository/commit/#{project.repository.commit.id}", user)
|
get api("/projects/#{project.id}/repository/commits/#{project.repository.commit.id}/diff", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
|
|
||||||
json_response.should be_an Array
|
json_response.should be_an Array
|
||||||
json_response.length.should >= 1
|
json_response.length.should >= 1
|
||||||
json_response.first.keys.should include "diff"
|
json_response.first.keys.should include "diff"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should return a 404 error if invalid commit" do
|
||||||
|
get api("/projects/#{project.id}/repository/commits/invalid_sha/diff", user)
|
||||||
|
response.status.should == 404
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "unauthorized user" do
|
context "unauthorized user" do
|
||||||
it "should not return the diff of the selected commit" do
|
it "should not return the diff of the selected commit" do
|
||||||
get api("/projects/#{project.id}/repository/commit/#{project.repository.commit.id}")
|
get api("/projects/#{project.id}/repository/commits/#{project.repository.commit.id}/diff")
|
||||||
response.status.should == 401
|
response.status.should == 401
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -157,25 +185,33 @@ describe API::API do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "GET /projects/:id/repository/blobs/:sha" do
|
||||||
|
it "should get the raw file contents" do
|
||||||
|
get api("/projects/#{project.id}/repository/blobs/master?filepath=README.md", user)
|
||||||
|
response.status.should == 200
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return 404 for invalid branch_name" do
|
||||||
|
get api("/projects/#{project.id}/repository/blobs/invalid_branch_name?filepath=README.md", user)
|
||||||
|
response.status.should == 404
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return 404 for invalid file" do
|
||||||
|
get api("/projects/#{project.id}/repository/blobs/master?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/blobs/master", user)
|
||||||
|
response.status.should == 400
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "GET /projects/:id/repository/commits/:sha/blob" do
|
describe "GET /projects/:id/repository/commits/:sha/blob" do
|
||||||
it "should get the raw file contents" do
|
it "should get the raw file contents" do
|
||||||
get api("/projects/#{project.id}/repository/commits/master/blob?filepath=README.md", user)
|
get api("/projects/#{project.id}/repository/commits/master/blob?filepath=README.md", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
end
|
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
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue