@@ -62,36 +62,43 @@ public final class RegistryManager {
62
62
}
63
63
}
64
64
65
- do {
66
- let manager = try cache. memoize ( url) {
67
- let request = HTTPClient . Request (
68
- method: . head,
69
- url: url,
70
- headers: [
71
- " Accept " : " application/vnd.swift.registry.v1 "
72
- ]
73
- )
74
-
75
- let client = clientFactory ( diagnosticsEngine)
76
-
77
- let response = try tsc_await { client. execute ( request, callback: $0) }
78
- if response. statusCode == 303 ,
79
- response. headers. get ( " Content-Version " ) . first == " 1 " ,
80
- let location = response. headers. get ( " Location " ) . first,
81
- let redirectedURL = URL ( string: location, relativeTo: url)
82
- {
83
- return RegistryManager ( registryBaseURL: redirectedURL, diagnosticEngine: diagnosticsEngine)
84
- } else {
85
- throw RegistryError . invalidResponse
86
- }
87
- }
88
-
65
+ if let manager = cache [ url] {
89
66
queue. async {
90
67
completion ( . success( manager) )
91
68
}
92
- } catch {
93
- queue. async {
94
- completion ( . failure( error) )
69
+ } else {
70
+ let request = HTTPClient . Request (
71
+ method: . head,
72
+ url: url,
73
+ headers: [
74
+ " Accept " : " application/vnd.swift.registry.v1 "
75
+ ]
76
+ )
77
+
78
+ let client = clientFactory ( diagnosticsEngine)
79
+ client. execute ( request) { result in
80
+ switch result {
81
+ case . success( let response) :
82
+ if response. statusCode == 303 ,
83
+ response. headers. get ( " Content-Version " ) . first == " 1 " ,
84
+ let location = response. headers. get ( " Location " ) . first,
85
+ let redirectedURL = URL ( string: location, relativeTo: url)
86
+ {
87
+ let manager = RegistryManager ( registryBaseURL: redirectedURL, diagnosticEngine: diagnosticsEngine)
88
+ self . cache [ url] = manager
89
+ queue. async {
90
+ completion ( . success( manager) )
91
+ }
92
+ } else {
93
+ queue. async {
94
+ completion ( . failure( RegistryError . invalidResponse) )
95
+ }
96
+ }
97
+ case . failure( let error) :
98
+ queue. async {
99
+ completion ( . failure( error) )
100
+ }
101
+ }
95
102
}
96
103
}
97
104
}
0 commit comments