@@ -120,87 +120,89 @@ public class RegistryPackageContainer: PackageContainer {
120
120
}
121
121
}
122
122
}
123
-
123
+
124
124
private func loadManifest( version: Version , completion: @escaping ( Result < Manifest , Error > ) -> Void ) {
125
125
self . getAvailableManifestsFilesystem ( version: version) { result in
126
- switch result {
127
- case . failure( let error) :
128
- return completion ( . failure( error) )
129
- case . success( let result) :
130
- do {
131
- let manifests = result. manifests
132
- let fileSystem = result. fileSystem
133
-
134
- // first, decide the tools-version we should use
135
- let preferredToolsVersion = try self . toolsVersionLoader. load ( at: . root, fileSystem: fileSystem)
136
- // validate preferred the tools version is compatible with the current toolchain
137
- try preferredToolsVersion. validateToolsVersion (
138
- self . currentToolsVersion,
139
- packageIdentity: self . package . identity
126
+ switch result {
127
+ case . failure( let error) :
128
+ return completion ( . failure( error) )
129
+ case . success( let result) :
130
+ do {
131
+ let manifests = result. manifests
132
+ let fileSystem = result. fileSystem
133
+
134
+ // first, decide the tools-version we should use
135
+ let preferredToolsVersion = try self . toolsVersionLoader. load ( at: . root, fileSystem: fileSystem)
136
+ // validate preferred the tools version is compatible with the current toolchain
137
+ try preferredToolsVersion. validateToolsVersion (
138
+ self . currentToolsVersion,
139
+ packageIdentity: self . package . identity
140
+ )
141
+ // load the manifest content
142
+ guard let defaultManifestToolsVersion = manifests. first ( where: { $0. key == Manifest . filename } ) ? . value. toolsVersion else {
143
+ throw StringError ( " Could not find the ' \( Manifest . filename) ' file for ' \( self . package . identity) ' ' \( version) ' " )
144
+ }
145
+ if preferredToolsVersion == defaultManifestToolsVersion {
146
+ // default tools version - we already have the content on disk from getAvailableManifestsFileSystem()
147
+ self . manifestLoader. load (
148
+ at: . root,
149
+ packageIdentity: self . package . identity,
150
+ packageKind: self . package . kind,
151
+ packageLocation: self . package . locationString,
152
+ version: version,
153
+ revision: nil ,
154
+ toolsVersion: preferredToolsVersion,
155
+ identityResolver: self . identityResolver,
156
+ fileSystem: result. fileSystem,
157
+ observabilityScope: self . observabilityScope,
158
+ delegateQueue: . sharedConcurrent,
159
+ callbackQueue: . sharedConcurrent,
160
+ completion: completion
140
161
)
141
- // load the manifest content
142
- guard let defaultManifestToolsVersion = manifests. first ( where: { $0. key == Manifest . filename } ) ? . value. toolsVersion else {
143
- throw StringError ( " Could not find the ' \( Manifest . filename) ' file for ' \( self . package . identity) ' ' \( version) ' " )
144
- }
145
- if preferredToolsVersion == defaultManifestToolsVersion {
146
- // default tools version - we already have the content on disk from getAvailableManifestsFileSystem()
147
- self . manifestLoader. load (
148
- at: . root,
149
- packageIdentity: self . package . identity,
150
- packageKind: self . package . kind,
151
- packageLocation: self . package . locationString,
152
- version: version,
153
- revision: nil ,
154
- toolsVersion: preferredToolsVersion,
155
- identityResolver: self . identityResolver,
156
- fileSystem: result. fileSystem,
157
- observabilityScope: self . observabilityScope,
158
- on: . sharedConcurrent,
159
- completion: completion
160
- )
161
- } else {
162
- // custom tools-version, we need to fetch the content from the server
163
- self . registryClient. getManifestContent (
164
- package : self . package . identity,
165
- version: version,
166
- customToolsVersion: preferredToolsVersion,
167
- observabilityScope: self . observabilityScope,
168
- callbackQueue: . sharedConcurrent
169
- ) { result in
170
- switch result {
171
- case . failure( let error) :
172
- return completion ( . failure( error) )
173
- case . success( let manifestContent) :
174
- do {
175
- // replace the fake manifest with the real manifest content
176
- let manifestPath = AbsolutePath . root. appending ( component: Manifest . basename + " @swift- \( preferredToolsVersion) .swift " )
177
- try fileSystem. removeFileTree ( manifestPath)
178
- try fileSystem. writeFileContents ( manifestPath, string: manifestContent)
179
- // finally, load the manifest
180
- self . manifestLoader. load (
181
- at: . root,
182
- packageIdentity: self . package . identity,
183
- packageKind: self . package . kind,
184
- packageLocation: self . package . locationString,
185
- version: version,
186
- revision: nil ,
187
- toolsVersion: preferredToolsVersion,
188
- identityResolver: self . identityResolver,
189
- fileSystem: fileSystem,
190
- observabilityScope: self . observabilityScope,
191
- on: . sharedConcurrent,
192
- completion: completion
193
- )
194
- } catch {
195
- return completion ( . failure( error) )
196
- }
197
- }
162
+ } else {
163
+ // custom tools-version, we need to fetch the content from the server
164
+ self . registryClient. getManifestContent (
165
+ package : self . package . identity,
166
+ version: version,
167
+ customToolsVersion: preferredToolsVersion,
168
+ observabilityScope: self . observabilityScope,
169
+ callbackQueue: . sharedConcurrent
170
+ ) { result in
171
+ switch result {
172
+ case . failure( let error) :
173
+ return completion ( . failure( error) )
174
+ case . success( let manifestContent) :
175
+ do {
176
+ // replace the fake manifest with the real manifest content
177
+ let manifestPath = AbsolutePath . root. appending ( component: Manifest . basename + " @swift- \( preferredToolsVersion) .swift " )
178
+ try fileSystem. removeFileTree ( manifestPath)
179
+ try fileSystem. writeFileContents ( manifestPath, string: manifestContent)
180
+ // finally, load the manifest
181
+ self . manifestLoader. load (
182
+ at: . root,
183
+ packageIdentity: self . package . identity,
184
+ packageKind: self . package . kind,
185
+ packageLocation: self . package . locationString,
186
+ version: version,
187
+ revision: nil ,
188
+ toolsVersion: preferredToolsVersion,
189
+ identityResolver: self . identityResolver,
190
+ fileSystem: fileSystem,
191
+ observabilityScope: self . observabilityScope,
192
+ delegateQueue: . sharedConcurrent,
193
+ callbackQueue: . sharedConcurrent,
194
+ completion: completion
195
+ )
196
+ } catch {
197
+ return completion ( . failure( error) )
198
+ }
198
199
}
199
200
}
200
- } catch {
201
- return completion ( . failure( error) )
202
201
}
202
+ } catch {
203
+ return completion ( . failure( error) )
203
204
}
205
+ }
204
206
}
205
207
}
206
208
0 commit comments