From 1e6766f9edb2a9bda18e89acef64ee03e8d3b2e4 Mon Sep 17 00:00:00 2001 From: Sean Edge Date: Wed, 21 May 2014 21:46:01 -0400 Subject: Add CreateTagService. Use new service to allow tag creation through API. --- app/services/create_tag_service.rb | 13 +++++++++++++ lib/api/repositories.rb | 16 ++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 app/services/create_tag_service.rb diff --git a/app/services/create_tag_service.rb b/app/services/create_tag_service.rb new file mode 100644 index 00000000000..97766677405 --- /dev/null +++ b/app/services/create_tag_service.rb @@ -0,0 +1,13 @@ +class CreateTagService + def execute(project, tag_name, ref, current_user) + repository = project.repository + repository.add_tag(tag_name, ref) + new_tag = repository.find_tag(tag_name) + + if new_tag + Event.create_ref_event(project, current_user, new_tag, 'add', 'refs/tags') + end + + new_tag + end +end diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb index 076a9ceeb74..e90d7c66125 100644 --- a/lib/api/repositories.rb +++ b/lib/api/repositories.rb @@ -25,6 +25,22 @@ module API present user_project.repo.tags.sort_by(&:name).reverse, with: Entities::RepoObject, project: user_project end + # Create tag + # + # Parameters: + # id (required) - The ID of a project + # tag_name (required) - The name of the tag + # ref (required) - Create tag from commit sha or branch + # Example Request: + # POST /projects/:id/repository/tags + post ':id/repository/tags' do + authorize_push_project + @tag = CreateTagService.new.execute(user_project, params[:tag_name], + params[:ref], current_user) + + present @tag, with: Entities::RepoObject, project: user_project + end + # Get a project repository tree # # Parameters: -- cgit v1.2.1 From 2490cfbcca368a872a0b66998bf739cc7ded8ae8 Mon Sep 17 00:00:00 2001 From: Sean Edge Date: Fri, 23 May 2014 18:58:49 -0400 Subject: Update documentaiton for create_tag method. --- doc/api/repositories.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/doc/api/repositories.md b/doc/api/repositories.md index 858fad0a0b5..f71084c7532 100644 --- a/doc/api/repositories.md +++ b/doc/api/repositories.md @@ -35,6 +35,40 @@ Parameters: ] ``` +## Create a new tag + +Creates new tag in the repository that points to the supplied ref. + +``` +POST /projects/:id/repository/tags +``` + +Parameters: + ++ `id` (required) - The ID of a project ++ `tag_name` (required) - The name of a tag ++ `ref` (required) - Create tag using commit sha, another tag name, or branch name. + +```json +[ + { + "name": "v1.0.0", + "commit": { + "id": "2695effb5807a22ff3d138d593fd856244e155e7", + "parents": [], + "message": "Initial commit", + "authored_date": "2012-05-28T04:42:42-07:00", + "author_name": "John Smith", + "author email": "john@example.com" + "committer_name": "Jack Smith", + "committed_date": "2012-05-28T04:42:42-07:00" + "committer_email": "jack@example.com" + }, + "protected": false + } +] +``` + ## List repository tree Get a list of repository files and directories in a project. -- cgit v1.2.1 From 446e920a1b0511eaf124b5c443d9f1c5a56b2667 Mon Sep 17 00:00:00 2001 From: Sean Edge Date: Mon, 26 May 2014 12:28:45 -0400 Subject: Add tests for creating tag with API. --- spec/requests/api/repositories_spec.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/spec/requests/api/repositories_spec.rb b/spec/requests/api/repositories_spec.rb index 5a5222ed3c5..f04775784bc 100644 --- a/spec/requests/api/repositories_spec.rb +++ b/spec/requests/api/repositories_spec.rb @@ -23,6 +23,25 @@ describe API::API, api: true do end end + describe 'POST /projects/:id/repository/tags' do + it 'should create a new tag' do + post api("/projects/#{project.id}/repository/tags", user), + tag_name: 'v1.0.0', + ref: '621491c677087aa243f165eab467bfdfbee00be1' + + response.status.should == 201 + json_response.first['name'].should == 'v1.0.0' + json_response['commit']['id'].should == '621491c677087aa243f165eab467bfdfbee00be1' + end + it "should deny for user without push access" do + post api("/projects/#{project.id}/repository/tags", user2), + tag_name: 'v1.0.0', + ref: '621491c677087aa243f165eab467bfdfbee00be1' + + response.status.should == 403 + end + end + describe "GET /projects/:id/repository/tree" do context "authorized user" do before { project.team << [user2, :reporter] } -- cgit v1.2.1 From 435740b8a261e664ba021536690395b4313846f3 Mon Sep 17 00:00:00 2001 From: Sean Edge Date: Mon, 26 May 2014 12:32:01 -0400 Subject: Fixup for HoundCI. --- spec/requests/api/repositories_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/api/repositories_spec.rb b/spec/requests/api/repositories_spec.rb index f04775784bc..a61f6bbc8c8 100644 --- a/spec/requests/api/repositories_spec.rb +++ b/spec/requests/api/repositories_spec.rb @@ -33,7 +33,7 @@ describe API::API, api: true do json_response.first['name'].should == 'v1.0.0' json_response['commit']['id'].should == '621491c677087aa243f165eab467bfdfbee00be1' end - it "should deny for user without push access" do + it 'should deny for user without push access' do post api("/projects/#{project.id}/repository/tags", user2), tag_name: 'v1.0.0', ref: '621491c677087aa243f165eab467bfdfbee00be1' -- cgit v1.2.1 From a8f2977c6ac969e91180d06cd3c9ceffed48fd58 Mon Sep 17 00:00:00 2001 From: Sean Edge Date: Mon, 26 May 2014 12:32:52 -0400 Subject: More fixup for HoundCI. Fix up some small issues in docs. --- doc/api/repositories.md | 4 ++-- spec/requests/api/repositories_spec.rb | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/api/repositories.md b/doc/api/repositories.md index f71084c7532..4633678e182 100644 --- a/doc/api/repositories.md +++ b/doc/api/repositories.md @@ -59,9 +59,9 @@ Parameters: "message": "Initial commit", "authored_date": "2012-05-28T04:42:42-07:00", "author_name": "John Smith", - "author email": "john@example.com" + "author email": "john@example.com", "committer_name": "Jack Smith", - "committed_date": "2012-05-28T04:42:42-07:00" + "committed_date": "2012-05-28T04:42:42-07:00", "committer_email": "jack@example.com" }, "protected": false diff --git a/spec/requests/api/repositories_spec.rb b/spec/requests/api/repositories_spec.rb index a61f6bbc8c8..d8348be2332 100644 --- a/spec/requests/api/repositories_spec.rb +++ b/spec/requests/api/repositories_spec.rb @@ -26,17 +26,18 @@ describe API::API, api: true do describe 'POST /projects/:id/repository/tags' do it 'should create a new tag' do post api("/projects/#{project.id}/repository/tags", user), - tag_name: 'v1.0.0', - ref: '621491c677087aa243f165eab467bfdfbee00be1' + tag_name: 'v1.0.0', + ref: '621491c677087aa243f165eab467bfdfbee00be1' response.status.should == 201 json_response.first['name'].should == 'v1.0.0' - json_response['commit']['id'].should == '621491c677087aa243f165eab467bfdfbee00be1' + json_response['commit']['id'].should == + '621491c677087aa243f165eab467bfdfbee00be1' end it 'should deny for user without push access' do post api("/projects/#{project.id}/repository/tags", user2), - tag_name: 'v1.0.0', - ref: '621491c677087aa243f165eab467bfdfbee00be1' + tag_name: 'v1.0.0', + ref: '621491c677087aa243f165eab467bfdfbee00be1' response.status.should == 403 end -- cgit v1.2.1 From 2d4ba2679a3bb2a26adf6c013d5d4be19ed8da94 Mon Sep 17 00:00:00 2001 From: Sean Edge Date: Wed, 28 May 2014 07:59:02 -0400 Subject: Update tags_controller.rb to use CreateTagService. --- app/controllers/projects/tags_controller.rb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/controllers/projects/tags_controller.rb b/app/controllers/projects/tags_controller.rb index 0b99165bf62..e03a9f4d66d 100644 --- a/app/controllers/projects/tags_controller.rb +++ b/app/controllers/projects/tags_controller.rb @@ -13,11 +13,8 @@ class Projects::TagsController < Projects::ApplicationController end def create - @repository.add_tag(params[:tag_name], params[:ref]) - - if new_tag = @repository.find_tag(params[:tag_name]) - Event.create_ref_event(@project, current_user, new_tag, 'add', 'refs/tags') - end + @tag = CreateTagService.new.execute(@project, params[:tag_name], + params[:ref], current_user) redirect_to project_tags_path(@project) end -- cgit v1.2.1 From 28de31f5200d908551d8372fed7511df80e284fd Mon Sep 17 00:00:00 2001 From: Sean Edge Date: Wed, 28 May 2014 11:14:51 -0400 Subject: Fix broken repositories_spec test for creating new tags. --- spec/requests/api/repositories_spec.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/spec/requests/api/repositories_spec.rb b/spec/requests/api/repositories_spec.rb index d8348be2332..173c4ef734b 100644 --- a/spec/requests/api/repositories_spec.rb +++ b/spec/requests/api/repositories_spec.rb @@ -27,12 +27,10 @@ describe API::API, api: true do it 'should create a new tag' do post api("/projects/#{project.id}/repository/tags", user), tag_name: 'v1.0.0', - ref: '621491c677087aa243f165eab467bfdfbee00be1' + ref: 'master' response.status.should == 201 - json_response.first['name'].should == 'v1.0.0' - json_response['commit']['id'].should == - '621491c677087aa243f165eab467bfdfbee00be1' + json_response['name'].should == 'v1.0.0' end it 'should deny for user without push access' do post api("/projects/#{project.id}/repository/tags", user2), -- cgit v1.2.1