From d139cc6b3283cef8f14660738d423ea63317203c Mon Sep 17 00:00:00 2001 From: Gabor Nagy Date: Sun, 25 Aug 2013 23:21:00 +0200 Subject: [PATCH] Adds feature: get a diff via API. --- doc/api/repositories.md | 28 ++++++++++++++++++++++++++ lib/api/repositories.rb | 14 +++++++++++++ spec/requests/api/repositories_spec.rb | 22 ++++++++++++++++++++ 3 files changed, 64 insertions(+) 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] }