Skip to content

Commit 31f3155

Browse files
committed
Cache registry managers by base URL
1 parent 120aeeb commit 31f3155

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

Sources/PackageRegistry/RegistryManager.swift

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public final class RegistryManager {
3838
return HTTPClient(configuration: configuration, handler: nil, diagnosticsEngine: nil)
3939
}
4040

41+
private static var cache = ThreadSafeKeyValueStore<URL, RegistryManager>()
42+
4143
let registryBaseURL: Foundation.URL
4244

4345
init(registryBaseURL: Foundation.URL) {
@@ -52,32 +54,34 @@ public final class RegistryManager {
5254
return completion(.failure(RegistryError.invalidURL))
5355
}
5456

55-
let request = HTTPClient.Request(
56-
method: .head,
57-
url: url,
58-
headers: [
59-
"Accept": "application/vnd.swift.registry.v1",
60-
"User-Agent": userAgent
61-
]
62-
)
57+
do {
58+
let manager = try cache.memoize(url) {
59+
let request = HTTPClient.Request(
60+
method: .head,
61+
url: url,
62+
headers: [
63+
"Accept": "application/vnd.swift.registry.v1",
64+
"User-Agent": userAgent
65+
]
66+
)
6367

64-
let client = clientFactory()
65-
client.execute(request) { result in
66-
switch result {
67-
case .success(let response):
68+
let client = clientFactory()
69+
70+
let response = try tsc_await { client.execute(request, callback: $0) }
6871
if response.statusCode == 303,
6972
response.headers.get("Content-Version").first == "1",
7073
let location = response.headers.get("Location").first,
7174
let redirectedURL = URL(string: location, relativeTo: url)
7275
{
73-
let manager = RegistryManager(registryBaseURL: redirectedURL)
74-
completion(.success(manager))
76+
return RegistryManager(registryBaseURL: redirectedURL)
7577
} else {
76-
completion(.failure(RegistryError.invalidResponse))
78+
throw RegistryError.invalidResponse
7779
}
78-
case .failure(let error):
79-
completion(.failure(error))
8080
}
81+
82+
completion(.success(manager))
83+
} catch {
84+
completion(.failure(error))
8185
}
8286
}
8387

0 commit comments

Comments
 (0)