summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabor Nagy <mail@aigeruth.hu>2013-08-25 23:21:00 +0200
committerGabor Nagy <mail@aigeruth.hu>2013-08-25 23:48:11 +0200
commitd139cc6b3283cef8f14660738d423ea63317203c (patch)
tree8de146b9f07a4aa74f40d0c48cfac156783747e8
parent2b36dee64485062c69779217d4a202e5ca1b67bd (diff)
downloadgitlab-ce-d139cc6b3283cef8f14660738d423ea63317203c.tar.gz
Adds feature: get a diff via API.
-rw-r--r--doc/api/repositories.md28
-rw-r--r--lib/api/repositories.rb14
-rw-r--r--spec/requests/api/repositories_spec.rb22
3 files changed, 64 insertions, 0 deletions
diff --git a/doc/api/repositories.md b/doc/api/repositories.md
index 7a9f766ba1d..229d4409ea6 100644
--- a/doc/api/repositories.md
+++ b/doc/api/repositories.md
@@ -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.
diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb
index 5db17b7e414..7e806546d02 100644
--- a/lib/api/repositories.rb
+++ b/lib/api/repositories.rb
@@ -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:
diff --git a/spec/requests/api/repositories_spec.rb b/spec/requests/api/repositories_spec.rb
index afa67d1ecbe..44892876ccb 100644
--- a/spec/requests/api/repositories_spec.rb
+++ b/spec/requests/api/repositories_spec.rb
@@ -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] }