diff options
author | Robert Schilling <rschilling@student.tugraz.at> | 2015-11-21 18:08:45 +0100 |
---|---|---|
committer | Robert Schilling <rschilling@student.tugraz.at> | 2015-11-21 18:08:45 +0100 |
commit | faef95af1a07bdcfd02eead36d144f332b428f1f (patch) | |
tree | 7f34f351e7681036bbafda1980e1d403316ee7d5 /app | |
parent | 2cba93a0d2d12ee36bf98569e5c6c14ac7ea40e0 (diff) | |
download | gitlab-ce-faef95af1a07bdcfd02eead36d144f332b428f1f.tar.gz |
API: Return 404 if the tag for a release does not exist
Diffstat (limited to 'app')
-rw-r--r-- | app/services/create_release_service.rb | 25 | ||||
-rw-r--r-- | app/services/create_tag_service.rb | 10 |
2 files changed, 30 insertions, 5 deletions
diff --git a/app/services/create_release_service.rb b/app/services/create_release_service.rb new file mode 100644 index 00000000000..355374ce252 --- /dev/null +++ b/app/services/create_release_service.rb @@ -0,0 +1,25 @@ +require_relative 'base_service' + +class CreateReleaseService < BaseService + def execute(tag_name, release_description) + + repository = project.repository + existing_tag = repository.find_tag(tag_name) + + # Only create a release if the tag exists + if existing_tag + release = project.releases.find_or_initialize_by(tag: tag_name) + release.update_attributes(description: release_description) + + success(release) + else + error('Tag does not exist') + end + end + + def success(release) + out = super() + out[:release] = release + out + end +end diff --git a/app/services/create_tag_service.rb b/app/services/create_tag_service.rb index 9917119fce2..2452999382a 100644 --- a/app/services/create_tag_service.rb +++ b/app/services/create_tag_service.rb @@ -19,16 +19,16 @@ class CreateTagService < BaseService new_tag = repository.find_tag(tag_name) if new_tag - if release_description - release = project.releases.find_or_initialize_by(tag: tag_name) - release.update_attributes(description: release_description) - end - push_data = create_push_data(project, current_user, new_tag) EventCreateService.new.push(project, current_user, push_data) project.execute_hooks(push_data.dup, :tag_push_hooks) project.execute_services(push_data.dup, :tag_push_hooks) + if release_description + CreateReleaseService.new(@project, @current_user). + execute(tag_name, release_description) + end + success(new_tag) else error('Invalid reference name') |