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 @@ ...@@ -13,7 +13,7 @@
= f.label :key = f.label :key
.controls .controls
%p.light %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" = f.text_area :key, class: "input-xxlarge thin_area"
......
...@@ -239,12 +239,37 @@ Parameters: ...@@ -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: ...@@ -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 ...@@ -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 ...@@ -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]
......
...@@ -374,8 +374,8 @@ namespace :gitlab do ...@@ -374,8 +374,8 @@ namespace :gitlab do
check_repo_base_is_not_symlink check_repo_base_is_not_symlink
check_repo_base_user_and_group check_repo_base_user_and_group
check_repo_base_permissions check_repo_base_permissions
check_post_receive_hook_is_up_to_date check_update_hook_is_up_to_date
check_repos_post_receive_hooks_is_link check_repos_update_hooks_is_link
finished_checking "GitLab Shell" finished_checking "GitLab Shell"
end end
...@@ -385,10 +385,10 @@ namespace :gitlab do ...@@ -385,10 +385,10 @@ namespace :gitlab do
######################## ########################
def check_post_receive_hook_is_up_to_date def check_update_hook_is_up_to_date
print "post-receive hook 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_hooks_path = Gitlab.config.gitlab_shell.hooks_path
gitlab_shell_hook_file = File.join(gitlab_shell_hooks_path, hook_file) gitlab_shell_hook_file = File.join(gitlab_shell_hooks_path, hook_file)
gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user
...@@ -494,10 +494,10 @@ namespace :gitlab do ...@@ -494,10 +494,10 @@ namespace :gitlab do
end end
end end
def check_repos_post_receive_hooks_is_link def check_repos_update_hooks_is_link
print "post-receive hooks in repos are links: ... " 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_hooks_path = Gitlab.config.gitlab_shell.hooks_path
gitlab_shell_hook_file = File.join(gitlab_shell_hooks_path, hook_file) gitlab_shell_hook_file = File.join(gitlab_shell_hooks_path, hook_file)
gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user
......
...@@ -112,23 +112,51 @@ describe API::API do ...@@ -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 ...@@ -157,25 +185,33 @@ describe API::API do
end end
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 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 response.status.should == 200
end end
it "should return 404 for invalid branch_name" do 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 response.status.should == 404
end end
it "should return 404 for invalid file" do 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 response.status.should == 404
end end
it "should return a 400 error if filepath is missing" do 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 response.status.should == 400
end end
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 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