summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-05-09 22:41:48 +0300
committerKamil Trzcinski <ayufan@ayufan.eu>2016-05-09 22:41:48 +0300
commitd5d8e76bd79cd9d61c66539a5069104cf46be2bd (patch)
treeff2762c9d1cb3616d32212e3299368d07c510d83
parentb5043d5d33ed2a213889dfe52c819addd0d847ef (diff)
downloadgitlab-ce-d5d8e76bd79cd9d61c66539a5069104cf46be2bd.tar.gz
Block renaming project or repository if it has container registry tags
-rw-r--r--app/models/namespace.rb8
-rw-r--r--app/models/project.rb11
-rw-r--r--app/services/projects/transfer_service.rb5
3 files changed, 24 insertions, 0 deletions
diff --git a/app/models/namespace.rb b/app/models/namespace.rb
index 741e912171d..0f61cee7888 100644
--- a/app/models/namespace.rb
+++ b/app/models/namespace.rb
@@ -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}")
diff --git a/app/models/project.rb b/app/models/project.rb
index 36ce472f3a3..d3ae7803bea 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -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
diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb
index 111b3ec05ea..0d72286dec7 100644
--- a/app/services/projects/transfer_service.rb
+++ b/app/services/projects/transfer_service.rb
@@ -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