summaryrefslogtreecommitdiff
path: root/app/services/projects/container_repository/delete_tags_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/projects/container_repository/delete_tags_service.rb')
-rw-r--r--app/services/projects/container_repository/delete_tags_service.rb16
1 files changed, 12 insertions, 4 deletions
diff --git a/app/services/projects/container_repository/delete_tags_service.rb b/app/services/projects/container_repository/delete_tags_service.rb
index 6a8b68d8ae3..48bd9394dc5 100644
--- a/app/services/projects/container_repository/delete_tags_service.rb
+++ b/app/services/projects/container_repository/delete_tags_service.rb
@@ -22,10 +22,18 @@ module Projects
def smart_delete(container_repository, tag_names)
# generates the blobs for the dummy image
dummy_manifest = container_repository.client.generate_empty_manifest(container_repository.path)
+ return error('could not generate manifest') if dummy_manifest.nil?
# update the manifests of the tags with the new dummy image
- tag_digests = tag_names.map do |name|
- container_repository.client.put_tag(container_repository.path, name, dummy_manifest)
+ deleted_tags = []
+ tag_digests = []
+
+ tag_names.each do |name|
+ digest = container_repository.client.put_tag(container_repository.path, name, dummy_manifest)
+ next unless digest
+
+ deleted_tags << name
+ tag_digests << digest
end
# make sure the digests are the same (it should always be)
@@ -37,8 +45,8 @@ module Projects
# Deletes the dummy image
# All created tag digests are the same since they all have the same dummy image.
# a single delete is sufficient to remove all tags with it
- if container_repository.delete_tag_by_digest(tag_digests.first)
- success(deleted: tag_names)
+ if tag_digests.any? && container_repository.delete_tag_by_digest(tag_digests.first)
+ success(deleted: deleted_tags)
else
error('could not delete tags')
end