Skip to content

Commit 27c24ec

Browse files
committed
Add queue parameter to RegistryManager.discover
1 parent 29e2e6c commit 27c24ec

File tree

4 files changed

+41
-31
lines changed

4 files changed

+41
-31
lines changed

Sources/PackageGraph/CompositePackageContainerProvider.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,19 +72,11 @@ public class CompositePackageContainerProvider: PackageContainerProvider {
7272
}
7373

7474
let provider = RepositoryPackageContainerProvider(repositoryManager: self.repositoryManager, mirrors: self.mirrors, manifestLoader: self.manifestLoader, currentToolsVersion: self.currentToolsVersion, toolsVersionLoader: self.toolsVersionLoader)
75-
provider.getContainer(for: reference, skipUpdate: skipUpdate, on: queue) { result in
76-
queue.async {
77-
completion(result)
78-
}
79-
}
75+
provider.getContainer(for: reference, skipUpdate: skipUpdate, on: queue, completion: completion)
8076
}
8177
} else {
8278
let provider = LocalPackageContainerProvider(mirrors: self.mirrors, manifestLoader: self.manifestLoader, currentToolsVersion: self.currentToolsVersion, toolsVersionLoader: self.toolsVersionLoader, fileSystem: self.fileSystem)
83-
provider.getContainer(for: reference, skipUpdate: skipUpdate, on: queue) { result in
84-
queue.async {
85-
completion(result)
86-
}
87-
}
79+
provider.getContainer(for: reference, skipUpdate: skipUpdate, on: queue, completion: completion)
8880
}
8981
}
9082
}

Sources/PackageGraph/RegistryPackageContainer.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ extension RegistryPackageContainerProvider: PackageContainerProvider {
201201
completion(.success(container))
202202
}
203203
} else {
204-
RegistryManager.discover(for: identifier) { result in
204+
RegistryManager.discover(for: identifier, on: queue) { result in
205205
switch result {
206206
case .success(let registryManager):
207207
RegistryPackageContainer.create(

Sources/PackageRegistry/RegistryManager.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,13 @@ public final class RegistryManager {
5252

5353
public class func discover(
5454
for package: PackageReference,
55+
on queue: DispatchQueue,
5556
completion: @escaping (Result<RegistryManager, Error>) -> Void
5657
) {
5758
guard let url = URL(string: "https://\(package.identity)") else {
58-
return completion(.failure(RegistryError.invalidURL))
59+
return queue.async {
60+
completion(.failure(RegistryError.invalidURL))
61+
}
5962
}
6063

6164
do {
@@ -82,9 +85,13 @@ public final class RegistryManager {
8285
}
8386
}
8487

85-
completion(.success(manager))
88+
queue.async {
89+
completion(.success(manager))
90+
}
8691
} catch {
87-
completion(.failure(error))
92+
queue.async {
93+
completion(.failure(error))
94+
}
8895
}
8996
}
9097

@@ -188,7 +195,7 @@ public final class RegistryManager {
188195
method: .get,
189196
url: url,
190197
headers: [
191-
"Accept": "application/vnd.swift.registry.v1+zip",
198+
"Accept": "application/vnd.swift.registry.v1+zip"
192199
]
193200
)
194201

Tests/PackageRegistryTests/RegistryManagerTests.swift

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ import FoundationNetworking
2424
#endif
2525

2626
final class RegistryManagerTests: XCTestCase {
27-
override func setUp() {
27+
private let queue = DispatchQueue(label: "org.swift.registry.tests")
28+
29+
class override func setUp() {
2830
PackageModel._useLegacyIdentities = false
2931

3032
RegistryManager.archiverFactory = { _ in
@@ -36,14 +38,16 @@ final class RegistryManagerTests: XCTestCase {
3638
configuration.protocolClasses = [MockPackageRegistryURLProtocol.self] + (configuration.protocolClasses ?? [])
3739
return URLSessionHTTPClient(configuration: configuration)
3840
}
41+
42+
super.setUp()
3943
}
4044

4145
func testDiscoverPackageRegistry() {
4246
let identity = PackageIdentity(url: "https://github.com/mona/LinkedList")
4347
let package = PackageReference(identity: identity, path: "/LinkedList")
4448
let expectation = XCTestExpectation(description: "discover package registry")
4549

46-
RegistryManager.discover(for: package) { result in
50+
RegistryManager.discover(for: package, on: queue) { result in
4751
defer { expectation.fulfill() }
4852

4953
XCTAssertResultSuccess(result)
@@ -58,15 +62,18 @@ final class RegistryManagerTests: XCTestCase {
5862
let expectation = XCTestExpectation(description: "discover package registry")
5963
let nestedExpectation = XCTestExpectation(description: "fetch versions")
6064

61-
RegistryManager.discover(for: package) { result in
65+
RegistryManager.discover(for: package, on: queue) { result in
6266
defer { expectation.fulfill() }
63-
guard case .success(let manager) = result else { return }
67+
guard case .success(let manager) = result else {
68+
return XCTAssertResultSuccess(result)
69+
}
6470

6571
manager.fetchVersions(of: package) { result in
6672
defer { nestedExpectation.fulfill() }
6773

68-
XCTAssertResultSuccess(result)
69-
guard case .success(let versions) = result else { return }
74+
guard case .success(let versions) = result else {
75+
return XCTAssertResultSuccess(result)
76+
}
7077

7178
XCTAssertEqual(versions, ["1.1.1", "1.0.0"])
7279
XCTAssertFalse(versions.contains("1.1.0"), "problematic releases shouldn't be included")
@@ -82,17 +89,20 @@ final class RegistryManagerTests: XCTestCase {
8289
let expectation = XCTestExpectation(description: "discover package registry")
8390
let nestedExpectation = XCTestExpectation(description: "fetch manifest")
8491

85-
RegistryManager.discover(for: package) { result in
92+
RegistryManager.discover(for: package, on: queue) { result in
8693
defer { expectation.fulfill() }
87-
guard case .success(let manager) = result else { return }
94+
guard case .success(let manager) = result else {
95+
return XCTAssertResultSuccess(result)
96+
}
8897

8998
let manifestLoader = ManifestLoader(manifestResources: Resources.default)
9099

91100
manager.fetchManifest(for: "1.1.1", of: package, using: manifestLoader) { result in
92101
defer { nestedExpectation.fulfill() }
93102

94-
XCTAssertResultSuccess(result)
95-
guard case .success(let manifest) = result else { return }
103+
guard case .success(let manifest) = result else {
104+
return XCTAssertResultSuccess(result)
105+
}
96106

97107
XCTAssertEqual(manifest.name, "LinkedList")
98108

@@ -117,19 +127,20 @@ final class RegistryManagerTests: XCTestCase {
117127
let identity = PackageIdentity(url: "https://github.com/mona/LinkedList")
118128
let package = PackageReference(identity: identity, path: "/LinkedList")
119129
let expectation = XCTestExpectation(description: "discover package registry")
120-
let nestedExpectation = XCTestExpectation(description: "fetch manifest")
130+
let nestedExpectation = XCTestExpectation(description: "download source archive")
121131

122-
RegistryManager.discover(for: package) { result in
132+
RegistryManager.discover(for: package, on: queue) { result in
123133
defer { expectation.fulfill() }
124-
guard case .success(let manager) = result else { return }
134+
guard case .success(let manager) = result else {
135+
return XCTAssertResultSuccess(result)
136+
}
125137

126138
let fs = InMemoryFileSystem()
127-
let path = AbsolutePath("/LinkedList-1.1.1.zip")
139+
let path = AbsolutePath("/LinkedList-1.1.1")
128140
manager.downloadSourceArchive(for: "1.1.1", of: package, into: fs, at: path) { result in
129141
defer { nestedExpectation.fulfill() }
130142

131-
XCTAssertResultSuccess(result)
132-
guard case .success = result else { return }
143+
guard case .success = result else { return XCTAssertResultSuccess(result) }
133144

134145
XCTAssertNoThrow {
135146
let data = try fs.readFileContents(path)

0 commit comments

Comments
 (0)