Commit ffb0ad93 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'master' of github.com:gitlabhq/gitlabhq

parents 255d6d8b 079d3a5d
......@@ -13,7 +13,7 @@
= f.label :key
.controls
%p.light
Paste your public key here. Read more about how generate it #{link_to "here", help_ssh_path}
Paste your public key here. Read more about how to generate a key on #{link_to "the SSH help page", help_ssh_path}.
= f.text_area :key, class: "input-xxlarge thin_area"
......
......@@ -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 in a project.
```
GET /projects/:id/repository/commit/:sha
GET /projects/:id/repository/commits/:sha/diff
```
Parameters:
......@@ -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:
......
......@@ -106,13 +106,29 @@ module API
#
# 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
......@@ -148,8 +164,8 @@ module API
# 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]
......
......@@ -374,8 +374,8 @@ namespace :gitlab do
check_repo_base_is_not_symlink
check_repo_base_user_and_group
check_repo_base_permissions
check_post_receive_hook_is_up_to_date
check_repos_post_receive_hooks_is_link
check_update_hook_is_up_to_date
check_repos_update_hooks_is_link
finished_checking "GitLab Shell"
end
......@@ -385,10 +385,10 @@ namespace :gitlab do
########################
def check_post_receive_hook_is_up_to_date
print "post-receive hook up-to-date? ... "
def check_update_hook_is_up_to_date
print "update hook up-to-date? ... "
hook_file = "post-receive"
hook_file = "update"
gitlab_shell_hooks_path = Gitlab.config.gitlab_shell.hooks_path
gitlab_shell_hook_file = File.join(gitlab_shell_hooks_path, hook_file)
gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user
......@@ -494,10 +494,10 @@ namespace :gitlab do
end
end
def check_repos_post_receive_hooks_is_link
print "post-receive hooks in repos are links: ... "
def check_repos_update_hooks_is_link
print "update hooks in repos are links: ... "
hook_file = "post-receive"
hook_file = "update"
gitlab_shell_hooks_path = Gitlab.config.gitlab_shell.hooks_path
gitlab_shell_hook_file = File.join(gitlab_shell_hooks_path, hook_file)
gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user
......
......@@ -112,23 +112,51 @@ describe API::API do
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
......@@ -157,25 +185,33 @@ describe API::API do
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
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