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:
Diffstat (limited to 'lib/container_registry/repository.rb')
-rw-r--r--lib/container_registry/repository.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/container_registry/repository.rb b/lib/container_registry/repository.rb
new file mode 100644
index 00000000000..c930878d265
--- /dev/null
+++ b/lib/container_registry/repository.rb
@@ -0,0 +1,55 @@
+module ContainerRegistry
+ class Repository
+ attr_reader :registry, :name
+
+ def initialize(registry, name)
+ @registry, @name = registry, name
+ end
+
+ def client
+ @client ||= registry.client
+ end
+
+ def [](tag)
+ ContainerRegistry::Tag.new(self, tag)
+ end
+
+ def manifest
+ return @manifest if defined?(@manifest)
+ @manifest = client.repository_tags(name)
+ end
+
+ def valid?
+ manifest.present?
+ end
+
+ def tags
+ return @tags if defined?(@tags)
+ return [] unless manifest && manifest['tags']
+ @tags = manifest['tags'].map do |tag|
+ ContainerRegistry::Tag.new(self, tag)
+ end
+ @tags ||= []
+ end
+
+ def delete_tags
+ return unless tags
+ tags.each(:delete)
+ end
+
+ def mount_blob(blob)
+ return unless blob
+ client.repository_mount_blob(name, blob.digest, blob.repository.name)
+ end
+
+ def mount_manifest(tag, manifest)
+ client.put_repository_manifest(name, tag, manifest)
+ end
+
+ def copy_to(other_repository)
+ tags.all? do |tag|
+ tag.copy_to(other_repository)
+ end
+ end
+ end
+end