cocoapods-core 1.7.2 → 1.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cocoapods-core/cdn_source.rb +36 -8
- data/lib/cocoapods-core/gem_version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '02973d64419e7900d55429665eca2284ad9983f9ef5ad9c282b7705039ae961f'
|
4
|
+
data.tar.gz: da5f66b809e679357de6bbe1d3f1beceac415d9d27b05a258df5ac7f06b3bffe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9186ce5f1af5ae40103f3bb5606f9adf9f8aa66e2004b1ae68ccdfd88a05c6fd3474a1809f948831254662ed78d5fd9108a084730152bd3ed2209ffd081afae4
|
7
|
+
data.tar.gz: 75ac1c751ed37d42e2b6900a48f2a19f6f102f0c3954cd100359ab754ef3d7868f96f50c79402b30f9b9dad3f85963a5912f825dac49326686162919fac6164c
|
@@ -6,6 +6,9 @@ module Pod
|
|
6
6
|
# Subclass of Pod::Source to provide support for CDN-based Specs repositories
|
7
7
|
#
|
8
8
|
class CDNSource < Source
|
9
|
+
MAX_CDN_NETWORK_THREADS = 50
|
10
|
+
MAX_NUMBER_OF_RETRIES = 5
|
11
|
+
|
9
12
|
# @param [String] repo The name of the repository
|
10
13
|
#
|
11
14
|
def initialize(repo)
|
@@ -16,8 +19,8 @@ module Pod
|
|
16
19
|
@startup_time = Time.new
|
17
20
|
|
18
21
|
@executor = Concurrent::ThreadPoolExecutor.new(
|
19
|
-
:min_threads =>
|
20
|
-
:max_threads =>
|
22
|
+
:min_threads => 5,
|
23
|
+
:max_threads => (ENV['MAX_CDN_NETWORK_THREADS'] || MAX_CDN_NETWORK_THREADS).to_i,
|
21
24
|
:max_queue => 0 # unbounded work queue
|
22
25
|
)
|
23
26
|
|
@@ -54,11 +57,14 @@ module Pod
|
|
54
57
|
def preheat_existing_files
|
55
58
|
all_existing_files = [repo.join('**/*.yml'), repo.join('**/*.txt'), repo.join('**/*.json')].map(&Pathname.method(:glob)).flatten
|
56
59
|
loaders = all_existing_files.map { |f| f.relative_path_from(repo).to_s }.map do |file|
|
57
|
-
Concurrent::
|
60
|
+
Concurrent::Promises.future_on(@executor) do
|
58
61
|
download_file(file)
|
59
62
|
end
|
60
63
|
end
|
61
|
-
|
64
|
+
|
65
|
+
catching_concurrent_errors do
|
66
|
+
Concurrent::Promises.zip(*loaders).wait!
|
67
|
+
end
|
62
68
|
end
|
63
69
|
|
64
70
|
# @return [Pathname] The directory where the specs are stored.
|
@@ -104,7 +110,7 @@ module Pod
|
|
104
110
|
# in #specification_path regardless.
|
105
111
|
podspec_version_path_relative = Pathname.new(version).join("#{name}.podspec.json")
|
106
112
|
unless pod_path_actual.join(podspec_version_path_relative).exist?
|
107
|
-
loaders << Concurrent::
|
113
|
+
loaders << Concurrent::Promises.future_on(@executor) do
|
108
114
|
download_file(pod_path_relative.join(podspec_version_path_relative).to_s)
|
109
115
|
end
|
110
116
|
end
|
@@ -113,10 +119,14 @@ module Pod
|
|
113
119
|
rescue ArgumentError
|
114
120
|
raise Informative, 'An unexpected version directory ' \
|
115
121
|
"`#{version}` was encountered for the " \
|
116
|
-
"`#{
|
122
|
+
"`#{pod_path_actual}` Pod in the `#{name}` repository."
|
117
123
|
end
|
118
124
|
end.compact.sort.reverse
|
119
|
-
|
125
|
+
|
126
|
+
catching_concurrent_errors do
|
127
|
+
Concurrent::Promises.zip(*loaders).wait!
|
128
|
+
end
|
129
|
+
|
120
130
|
@versions_by_name[name]
|
121
131
|
end
|
122
132
|
|
@@ -302,7 +312,7 @@ module Pod
|
|
302
312
|
path = repo + partial_url
|
303
313
|
etag_path = path.sub_ext(path.extname + '.etag')
|
304
314
|
|
305
|
-
response =
|
315
|
+
response = download_retrying_connection_errors(partial_url, file_remote_url, etag)
|
306
316
|
|
307
317
|
case response.status_code
|
308
318
|
when 301
|
@@ -328,6 +338,17 @@ module Pod
|
|
328
338
|
end
|
329
339
|
end
|
330
340
|
|
341
|
+
def download_retrying_connection_errors(partial_url, file_remote_url, etag, retries = MAX_NUMBER_OF_RETRIES)
|
342
|
+
etag.nil? ? REST.get(file_remote_url) : REST.get(file_remote_url, 'If-None-Match' => etag)
|
343
|
+
rescue REST::Error => e
|
344
|
+
if retries <= 0
|
345
|
+
raise Informative, "CDN: #{name} Relative path couldn't be downloaded: #{partial_url}, error: #{e}"
|
346
|
+
else
|
347
|
+
debug "CDN: #{name} Relative path: #{partial_url} error: #{e} - retrying"
|
348
|
+
download_retrying_connection_errors(partial_url, file_remote_url, etag, retries - 1)
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
331
352
|
def debug(message)
|
332
353
|
if defined?(Pod::UI)
|
333
354
|
Pod::UI.message(message)
|
@@ -335,5 +356,12 @@ module Pod
|
|
335
356
|
CoreUI.puts(message)
|
336
357
|
end
|
337
358
|
end
|
359
|
+
|
360
|
+
def catching_concurrent_errors
|
361
|
+
yield
|
362
|
+
rescue Concurrent::MultipleErrors => e
|
363
|
+
errors = e.errors
|
364
|
+
raise Informative, "CDN: #{name} Repo update failed - #{e.errors.size} error(s):\n#{errors.join("\n")}"
|
365
|
+
end
|
338
366
|
end
|
339
367
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eloy Duran
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-06-
|
12
|
+
date: 2019-06-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|