Commit d5d8e76b authored by Kamil Trzcinski's avatar Kamil Trzcinski

Block renaming project or repository if it has container registry tags

parent b5043d5d
......@@ -127,6 +127,10 @@ class Namespace < ActiveRecord::Base
# Ensure old directory exists before moving it
gitlab_shell.add_namespace(path_was)
if any_project_has_container_registry_tags?
raise Exception.new('namespace cannot be moved, because at least one project has tags in container registry')
end
if gitlab_shell.mv_namespace(path_was, path)
Gitlab::UploadsTransfer.new.rename_namespace(path_was, path)
......@@ -148,6 +152,10 @@ class Namespace < ActiveRecord::Base
end
end
def any_project_has_container_registry_tags?
projects.any?(:has_container_registry_tags?)
end
def send_update_instructions
projects.each do |project|
project.send_move_instructions("#{path_was}/#{project.path}")
......
......@@ -391,6 +391,12 @@ class Project < ActiveRecord::Base
end
end
def has_container_registry_tags?
if container_registry_enabled? && Gitlab.config.registry.enabled
container_registry_repository.tags.any?
end
end
def commit(id = 'HEAD')
repository.commit(id)
end
......@@ -806,6 +812,11 @@ class Project < ActiveRecord::Base
expire_caches_before_rename(old_path_with_namespace)
if has_container_registry_tags?
# we currently doesn't support renaming repository if it contains tags in container registry
raise Exception.new('repository cannot be renamed, due to tags in container registry')
end
if gitlab_shell.mv_repository(old_path_with_namespace, new_path_with_namespace)
# If repository moved successfully we need to send update instructions to users.
# However we cannot allow rollback since we moved repository
......
......@@ -34,6 +34,11 @@ module Projects
raise TransferError.new("Project with same path in target namespace already exists")
end
if project.has_container_registry_tags?
# we currently doesn't support renaming repository if it contains tags in container registry
raise TransferError.new('Repository cannot be renamed, due to tags in container registry')
end
project.expire_caches_before_rename(old_path)
# Apply new namespace id and visibility level
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment