docker_registry2 1.10.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/docker_registry2.rb +0 -2
- data/lib/registry/registry.rb +39 -15
- data/lib/registry/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 869a69624555c180f16132300dfc203787a4e3ffd616f49f26ec7f199b469f1a
|
4
|
+
data.tar.gz: cab7c1746af1ef6956726f42524da542f2ebf9a2fe4a56cc793148aa04a285d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 953669f5e94fef460fe7a3d866964aa76c87a29b2e2285ecb9a85a7058c43317ea1a683aa96e4c23bda450f48805edbc5c681f601ce00a81ae1e93020f6e02c0
|
7
|
+
data.tar.gz: 02fbf888184e024bdf49a62b8b2e4161ae02d1df7f265bbf93aa5e4244fde50221e4fd93e085c291f4333c2ba691ffcc469d016832091c8cb3a286bea39978ba
|
data/lib/docker_registry2.rb
CHANGED
data/lib/registry/registry.rb
CHANGED
@@ -38,19 +38,34 @@ class DockerRegistry2::Registry
|
|
38
38
|
return doreq "head", url
|
39
39
|
end
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
# When a result set is too large, the Docker registry returns only the first items and adds a Link header in the
|
42
|
+
# response with the URL of the next page. See <https://docs.docker.com/registry/spec/api/#pagination>. This method
|
43
|
+
# iterates over the pages and calls the given block with each response.
|
44
|
+
def paginate_doget(url)
|
45
|
+
while url
|
46
|
+
response = doget(url)
|
47
|
+
yield response
|
48
|
+
|
49
|
+
if (link = response.headers[:link])
|
50
|
+
url = parse_link_header(link)[:next]
|
51
|
+
else
|
52
|
+
break
|
53
|
+
end
|
54
|
+
end
|
43
55
|
end
|
44
56
|
|
45
57
|
def search(query = '')
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
58
|
+
all_repos = []
|
59
|
+
paginate_doget "/v2/_catalog" do |response|
|
60
|
+
# parse the response
|
61
|
+
repos = JSON.parse(response)["repositories"]
|
62
|
+
if query.strip.length > 0
|
63
|
+
re = Regexp.new query
|
64
|
+
repos = repos.find_all {|e| re =~ e }
|
65
|
+
end
|
66
|
+
all_repos += repos
|
52
67
|
end
|
53
|
-
|
68
|
+
all_repos
|
54
69
|
end
|
55
70
|
|
56
71
|
def tags(repo,count=nil,last="",withHashes = false, auto_paginate: false)
|
@@ -113,13 +128,13 @@ class DockerRegistry2::Registry
|
|
113
128
|
|
114
129
|
def blob(repo, digest, outpath=nil)
|
115
130
|
blob_url = "/v2/#{repo}/blobs/#{digest}"
|
116
|
-
if outpath.nil?
|
131
|
+
if outpath.nil?
|
117
132
|
response = doget(blob_url)
|
118
133
|
DockerRegistry2::Blob.new(response.headers, response.body)
|
119
134
|
else
|
120
135
|
File.open(outpath, 'w') do |fd|
|
121
136
|
doreq('get', blob_url, fd)
|
122
|
-
end
|
137
|
+
end
|
123
138
|
|
124
139
|
outpath
|
125
140
|
end
|
@@ -212,7 +227,9 @@ class DockerRegistry2::Registry
|
|
212
227
|
Integer(response.headers[:content_length],10)
|
213
228
|
end
|
214
229
|
|
215
|
-
|
230
|
+
# Parse the value of the Link HTTP header and return a Hash whose keys are the rel values turned into symbols, and
|
231
|
+
# the values are URLs. For example, `{ next: '/v2/_catalog?n=100&last=x' }`.
|
232
|
+
def parse_link_header(header)
|
216
233
|
last=''
|
217
234
|
parts = header.split(',')
|
218
235
|
links = Hash.new
|
@@ -221,13 +238,20 @@ class DockerRegistry2::Registry
|
|
221
238
|
parts.each do |part, index|
|
222
239
|
section = part.split(';')
|
223
240
|
url = section[0][/<(.*)>/,1]
|
224
|
-
name = section[1][/rel="(
|
241
|
+
name = section[1][/rel="?([^"]*)"?/,1].to_sym
|
225
242
|
links[name] = url
|
226
243
|
end
|
227
244
|
|
245
|
+
links
|
246
|
+
end
|
247
|
+
|
248
|
+
def last(header)
|
249
|
+
links = parse_link_header(header)
|
228
250
|
if links[:next]
|
229
251
|
query=URI(links[:next]).query
|
230
|
-
|
252
|
+
link_key = @uri.host.eql?('quay.io') ? 'next_page' : 'last'
|
253
|
+
last=URI::decode_www_form(query).to_h[link_key]
|
254
|
+
|
231
255
|
end
|
232
256
|
last
|
233
257
|
end
|
@@ -261,7 +285,7 @@ class DockerRegistry2::Registry
|
|
261
285
|
raise DockerRegistry2::NotFound, error
|
262
286
|
rescue RestClient::Unauthorized => e
|
263
287
|
header = e.response.headers[:www_authenticate]
|
264
|
-
method = header.downcase.split(' ')[0]
|
288
|
+
method = header.to_s.downcase.split(' ')[0]
|
265
289
|
case method
|
266
290
|
when 'basic'
|
267
291
|
response = do_basic_req(type, url, stream, payload)
|
data/lib/registry/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker_registry2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Avi Deitcher https://github.com/deitch
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2022-08-23 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
requirements: []
|
105
|
-
rubygems_version: 3.1.
|
105
|
+
rubygems_version: 3.1.6
|
106
106
|
signing_key:
|
107
107
|
specification_version: 4
|
108
108
|
summary: Docker v2 registry HTTP API client
|