Skip to content

Commit

Permalink
Merge pull request gitlabhq#4906 from alexvh/standardize_diff_api_url
Browse files Browse the repository at this point in the history
Standardize recently added commit diff api url
  • Loading branch information
dzaporozhets committed Aug 29, 2013
2 parents 4aa2d16 + 59f428d commit 079d3a5
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 14 deletions.
29 changes: 27 additions & 2 deletions doc/api/repositories.md
Original file line number Diff line number Diff line change
Expand Up @@ -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": "[email protected]",
"created_at": "2012-09-20T09:06:12+03:00"
}
```


## Get the diff of a commit

Get the diff of a commit in a project.

```
GET /projects/:id/repository/commit/:sha
GET /projects/:id/repository/commits/:sha/diff
```

Parameters:
Expand Down Expand Up @@ -323,7 +348,7 @@ Parameters:
Get the raw file contents for a file.

```
GET /projects/:id/repository/commits/:sha/blob
GET /projects/:id/repository/blobs/:sha
```

Parameters:
Expand Down
24 changes: 20 additions & 4 deletions lib/api/repositories.rb
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,29 @@ def handle_project_member_errors(errors)
#
# Parameters:
# 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
# Example Request:
# GET /projects/:id/repository/commit/:sha
get ":id/repository/commit/:sha" do
# GET /projects/:id/repository/commits/:sha/diff
get ":id/repository/commits/:sha/diff" do
authorize! :download_code, user_project
sha = params[:sha]
result = CommitLoadContext.new(user_project, current_user, {id: sha}).execute
not_found! "Commit" unless result[:commit]
result[:commit].diffs
end

Expand Down Expand Up @@ -148,8 +164,8 @@ def handle_project_member_errors(errors)
# sha (required) - The commit or branch name
# filepath (required) - The path to the file to display
# Example Request:
# GET /projects/:id/repository/commits/:sha/blob
get ":id/repository/commits/:sha/blob" do
# GET /projects/:id/repository/blobs/:sha
get [ ":id/repository/blobs/:sha", ":id/repository/commits/:sha/blob" ] do
authorize! :download_code, user_project
required_attributes! [:filepath]

Expand Down
52 changes: 44 additions & 8 deletions spec/requests/api/repositories_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -112,23 +112,51 @@
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
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)
get api("/projects/#{project.id}/repository/commits/#{project.repository.commit.id}/diff", user)
response.status.should == 200

json_response.should be_an Array
json_response.length.should >= 1
json_response.first.keys.should include "diff"
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

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}")
get api("/projects/#{project.id}/repository/commits/#{project.repository.commit.id}/diff")
response.status.should == 401
end
end
Expand Down Expand Up @@ -157,25 +185,33 @@
end
end

describe "GET /projects/:id/repository/commits/:sha/blob" do
describe "GET /projects/:id/repository/blobs/:sha" 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/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/commits/invalid_branch_name/blob?filepath=README.md", user)
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/commits/master/blob?filepath=README.invalid", user)
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/commits/master/blob", user)
get api("/projects/#{project.id}/repository/blobs/master", user)
response.status.should == 400
end
end

describe "GET /projects/:id/repository/commits/:sha/blob" do
it "should get the raw file contents" do
get api("/projects/#{project.id}/repository/commits/master/blob?filepath=README.md", user)
response.status.should == 200
end
end

end

0 comments on commit 079d3a5

Please sign in to comment.