Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-03-25 15:08:19 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-03-25 15:08:19 +0300
commite6baeabaa9651d90b03bb64ffce75a2c3cb89aab (patch)
tree85f3cbd6e437b17be59505cf3ac4794c1838609e /app/services/projects
parent5064bf8c5647d4c4430cbb4d097cf1592416de29 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/projects')
-rw-r--r--app/services/projects/container_repository/cleanup_tags_service.rb40
1 files changed, 10 insertions, 30 deletions
diff --git a/app/services/projects/container_repository/cleanup_tags_service.rb b/app/services/projects/container_repository/cleanup_tags_service.rb
index 6eb8f5c27d9..fc09d14ba4d 100644
--- a/app/services/projects/container_repository/cleanup_tags_service.rb
+++ b/app/services/projects/container_repository/cleanup_tags_service.rb
@@ -8,53 +8,30 @@ module Projects
return error('access denied') unless can_destroy?
tags = container_repository.tags
- tags_by_digest = group_by_digest(tags)
-
tags = without_latest(tags)
tags = filter_by_name(tags)
- tags = with_manifest(tags)
- tags = order_by_date(tags)
tags = filter_keep_n(tags)
tags = filter_by_older_than(tags)
- deleted_tags = delete_tags(tags, tags_by_digest)
-
- success(deleted: deleted_tags.map(&:name))
+ delete_tags(container_repository, tags)
end
private
- def delete_tags(tags_to_delete, tags_by_digest)
- deleted_digests = group_by_digest(tags_to_delete).select do |digest, tags|
- delete_tag_digest(tags, tags_by_digest[digest])
- end
-
- deleted_digests.values.flatten
- end
-
- def delete_tag_digest(tags, other_tags)
- # Issue: https://gitlab.com/gitlab-org/gitlab-foss/issues/21405
- # we have to remove all tags due
- # to Docker Distribution bug unable
- # to delete single tag
- return unless tags.count == other_tags.count
+ def delete_tags(container_repository, tags)
+ return success(deleted: []) unless tags.any?
- # delete all tags
- tags.map(&:unsafe_delete)
- end
+ tag_names = tags.map(&:name)
- def group_by_digest(tags)
- tags.group_by(&:digest)
+ Projects::ContainerRepository::DeleteTagsService
+ .new(container_repository.project, current_user, tags: tag_names)
+ .execute(container_repository)
end
def without_latest(tags)
tags.reject(&:latest?)
end
- def with_manifest(tags)
- tags.select(&:valid?)
- end
-
def order_by_date(tags)
now = DateTime.now
tags.sort_by { |tag| tag.created_at || now }.reverse
@@ -74,6 +51,9 @@ module Projects
end
def filter_keep_n(tags)
+ return tags unless params['keep_n']
+
+ tags = order_by_date(tags)
tags.drop(params['keep_n'].to_i)
end