From 1e6766f9edb2a9bda18e89acef64ee03e8d3b2e4 Mon Sep 17 00:00:00 2001 From: Sean Edge Date: Wed, 21 May 2014 21:46:01 -0400 Subject: [PATCH] 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: -- GitLab