summaryrefslogtreecommitdiff
path: root/lib/container_registry/repository.rb
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-05-09 22:14:46 +0300
committerKamil Trzcinski <ayufan@ayufan.eu>2016-05-09 22:14:46 +0300
commit08396be619eee2e71c2f5f7aa27eea6f5ddf10ff (patch)
tree57377cb67bcc8e9eb9d221e24f167485f3e1ed11 /lib/container_registry/repository.rb
parent565a5e36fc456831fd08e0627a936855d87eb932 (diff)
downloadgitlab-ce-08396be619eee2e71c2f5f7aa27eea6f5ddf10ff.tar.gz
Rename ImageRegistry to ContainerRegistry
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