Skip to content

Commit b52c2c7

Browse files
Merge pull request #3322 from SwiftPackageIndex/convert-ELF-to-async-await
Convert ELF to async await
2 parents 3ec5bdb + da7609c commit b52c2c7

File tree

11 files changed

+487
-626
lines changed

11 files changed

+487
-626
lines changed

Sources/App/Commands/Analyze.swift

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ extension Analyze {
196196
}
197197

198198
for (version, pkgInfo) in versionsPkgInfo {
199-
try await updateVersion(on: tx, version: version, packageInfo: pkgInfo).get()
199+
try await updateVersion(on: tx, version: version, packageInfo: pkgInfo)
200200
try await recreateProducts(on: tx, version: version, manifest: pkgInfo.packageManifest)
201201
try await recreateTargets(on: tx, version: version, manifest: pkgInfo.packageManifest)
202202
}
@@ -567,7 +567,7 @@ extension Analyze {
567567
/// - Returns: future
568568
static func updateVersion(on database: Database,
569569
version: Version,
570-
packageInfo: PackageInfo) -> EventLoopFuture<Void> {
570+
packageInfo: PackageInfo) async throws {
571571
let manifest = packageInfo.packageManifest
572572
version.packageName = manifest.name
573573
version.swiftVersions = manifest.swiftLanguageVersions?.compactMap(SwiftVersion.init) ?? []
@@ -576,13 +576,13 @@ extension Analyze {
576576
version.spiManifest = packageInfo.spiManifest
577577
version.hasBinaryTargets = packageInfo.packageManifest.targets.contains { $0.type == .binary }
578578

579-
return version.save(on: database)
579+
try await version.save(on: database)
580580
}
581581

582582

583583
static func recreateProducts(on database: Database, version: Version, manifest: Manifest) async throws {
584-
try await deleteProducts(on: database, version: version).get()
585-
try await createProducts(on: database, version: version, manifest: manifest).get()
584+
try await deleteProducts(on: database, version: version)
585+
try await createProducts(on: database, version: version, manifest: manifest)
586586
}
587587

588588

@@ -591,11 +591,9 @@ extension Analyze {
591591
/// - database: database connection
592592
/// - version: parent model object
593593
/// - Returns: future
594-
static func deleteProducts(on database: Database, version: Version) -> EventLoopFuture<Void> {
595-
guard let versionId = version.id else {
596-
return database.eventLoop.future()
597-
}
598-
return Product.query(on: database)
594+
static func deleteProducts(on database: Database, version: Version) async throws {
595+
guard let versionId = version.id else { return }
596+
try await Product.query(on: database)
599597
.filter(\.$version.$id == versionId)
600598
.delete()
601599
}
@@ -607,8 +605,8 @@ extension Analyze {
607605
/// - version: version to update
608606
/// - manifest: `Manifest` data
609607
/// - Returns: future
610-
static func createProducts(on database: Database, version: Version, manifest: Manifest) -> EventLoopFuture<Void> {
611-
manifest.products.compactMap { manifestProduct in
608+
static func createProducts(on database: Database, version: Version, manifest: Manifest) async throws {
609+
try await manifest.products.compactMap { manifestProduct in
612610
try? Product(version: version,
613611
type: .init(manifestProductType: manifestProduct.type),
614612
name: manifestProduct.name,
@@ -619,8 +617,8 @@ extension Analyze {
619617

620618

621619
static func recreateTargets(on database: Database, version: Version, manifest: Manifest) async throws {
622-
try await deleteTargets(on: database, version: version).get()
623-
try await createTargets(on: database, version: version, manifest: manifest).get()
620+
try await deleteTargets(on: database, version: version)
621+
try await createTargets(on: database, version: version, manifest: manifest)
624622
}
625623

626624

@@ -629,11 +627,9 @@ extension Analyze {
629627
/// - database: database connection
630628
/// - version: parent model object
631629
/// - Returns: future
632-
static func deleteTargets(on database: Database, version: Version) -> EventLoopFuture<Void> {
633-
guard let versionId = version.id else {
634-
return database.eventLoop.future()
635-
}
636-
return Target.query(on: database)
630+
static func deleteTargets(on database: Database, version: Version) async throws {
631+
guard let versionId = version.id else { return }
632+
try await Target.query(on: database)
637633
.filter(\.$version.$id == versionId)
638634
.delete()
639635
}
@@ -645,8 +641,8 @@ extension Analyze {
645641
/// - version: version to update
646642
/// - manifest: `Manifest` data
647643
/// - Returns: future
648-
static func createTargets(on database: Database, version: Version, manifest: Manifest) -> EventLoopFuture<Void> {
649-
manifest.targets.compactMap {
644+
static func createTargets(on database: Database, version: Version, manifest: Manifest) async throws {
645+
try await manifest.targets.compactMap {
650646
try? Target(version: version, name: $0.name, type: .init(manifestTargetType: $0.type))
651647
}
652648
.create(on: database)

Sources/App/Commands/Common.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ import Vapor
1919

2020
/// Update packages (in the `[Result<Joined<Package, Repository>, Error>]` array).
2121
///
22-
/// Unlike the overload with a result parameter `Result<(Joined<Package, Repository>, [Version])` this will not use `Version` information to update the package.
23-
///
2422
/// - Parameters:
2523
/// - client: `Client` object
2624
/// - database: `Database` object

Sources/App/Commands/ReAnalyzeVersions.swift

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -201,15 +201,9 @@ enum ReAnalyzeVersions {
201201
continue
202202
}
203203

204-
try await Analyze.updateVersion(on: tx,
205-
version: version,
206-
packageInfo: pkgInfo).get()
207-
try await Analyze.recreateProducts(on: tx,
208-
version: version,
209-
manifest: pkgInfo.packageManifest)
210-
try await Analyze.recreateTargets(on: tx,
211-
version: version,
212-
manifest: pkgInfo.packageManifest)
204+
try await Analyze.updateVersion(on: tx, version: version, packageInfo: pkgInfo)
205+
try await Analyze.recreateProducts(on: tx, version: version, manifest: pkgInfo.packageManifest)
206+
try await Analyze.recreateTargets(on: tx, version: version, manifest: pkgInfo.packageManifest)
213207
}
214208

215209
// No need to run `updateLatestVersions` because we're only operating on existing versions,

Sources/App/Core/Extensions/Array+ext.swift

Lines changed: 0 additions & 48 deletions
This file was deleted.

Sources/App/Core/Extensions/Model+ext.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@ import Fluent
1616

1717

1818
extension Array where Element: FluentKit.Model {
19-
public func save(on database: Database) -> EventLoopFuture<Void> {
20-
map {
21-
$0.save(on: database)
22-
}.flatten(on: database.eventLoop)
23-
}
24-
2519
public func save(on database: Database) async throws -> Void {
2620
for element in self {
2721
try await element.save(on: database)

Tests/AppTests/AnalyzerTests.swift

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -746,10 +746,10 @@ class AnalyzerTests: AppTestCase {
746746
XCTAssertEqual(info.packageManifest.name, "SPI-Server")
747747
}
748748

749-
func test_updateVersion() throws {
749+
func test_updateVersion() async throws {
750750
// setup
751751
let pkg = Package(id: UUID(), url: "1")
752-
try pkg.save(on: app.db).wait()
752+
try await pkg.save(on: app.db)
753753
let version = try Version(package: pkg, reference: .branch("main"))
754754
let manifest = Manifest(name: "foo",
755755
platforms: [.init(platformName: .ios, version: "11.0"),
@@ -767,13 +767,12 @@ class AnalyzerTests: AppTestCase {
767767
""")
768768

769769
// MUT
770-
_ = try Analyze.updateVersion(on: app.db,
771-
version: version,
772-
packageInfo: .init(packageManifest: manifest,
773-
spiManifest: spiManifest)).wait()
770+
_ = try await Analyze.updateVersion(on: app.db,
771+
version: version,
772+
packageInfo: .init(packageManifest: manifest, spiManifest: spiManifest))
774773

775774
// read back and validate
776-
let v = try Version.query(on: app.db).first().wait()!
775+
let v = try await XCTUnwrapAsync(await Version.query(on: app.db).first())
777776
XCTAssertEqual(v.packageName, "foo")
778777
XCTAssertEqual(v.resolvedDependencies?.map(\.packageName), nil)
779778
XCTAssertEqual(v.swiftVersions, ["1", "2", "3.0.0"].asSwiftVersions)
@@ -782,7 +781,7 @@ class AnalyzerTests: AppTestCase {
782781
XCTAssertEqual(v.spiManifest, spiManifest)
783782
}
784783

785-
func test_createProducts() throws {
784+
func test_createProducts() async throws {
786785
// setup
787786
let p = Package(id: UUID(), url: "1")
788787
let v = try Version(id: UUID(), package: p, packageName: "1", reference: .tag(.init(1, 0, 0)))
@@ -795,35 +794,35 @@ class AnalyzerTests: AppTestCase {
795794
type: .executable)],
796795
targets: [],
797796
toolsVersion: .init(version: "5.0.0"))
798-
try p.save(on: app.db).wait()
799-
try v.save(on: app.db).wait()
797+
try await p.save(on: app.db)
798+
try await v.save(on: app.db)
800799

801800
// MUT
802-
try Analyze.createProducts(on: app.db, version: v, manifest: m).wait()
801+
try await Analyze.createProducts(on: app.db, version: v, manifest: m)
803802

804803
// validation
805-
let products = try Product.query(on: app.db).sort(\.$createdAt).all().wait()
804+
let products = try await Product.query(on: app.db).sort(\.$createdAt).all()
806805
XCTAssertEqual(products.map(\.name), ["p1", "p2"])
807806
XCTAssertEqual(products.map(\.targets), [["t1", "t2"], ["t3", "t4"]])
808807
XCTAssertEqual(products.map(\.type), [.library(.automatic), .executable])
809808
}
810809

811-
func test_createTargets() throws {
810+
func test_createTargets() async throws {
812811
// setup
813812
let p = Package(id: UUID(), url: "1")
814813
let v = try Version(id: UUID(), package: p, packageName: "1", reference: .tag(.init(1, 0, 0)))
815814
let m = Manifest(name: "1",
816815
products: [],
817816
targets: [.init(name: "t1", type: .regular), .init(name: "t2", type: .executable)],
818817
toolsVersion: .init(version: "5.0.0"))
819-
try p.save(on: app.db).wait()
820-
try v.save(on: app.db).wait()
818+
try await p.save(on: app.db)
819+
try await v.save(on: app.db)
821820

822821
// MUT
823-
try Analyze.createTargets(on: app.db, version: v, manifest: m).wait()
822+
try await Analyze.createTargets(on: app.db, version: v, manifest: m)
824823

825824
// validation
826-
let targets = try Target.query(on: app.db).sort(\.$createdAt).all().wait()
825+
let targets = try await Target.query(on: app.db).sort(\.$createdAt).all()
827826
XCTAssertEqual(targets.map(\.name), ["t1", "t2"])
828827
XCTAssertEqual(targets.map(\.type), [.regular, .executable])
829828
}

Tests/AppTests/ArrayExtensionTests.swift

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -22,77 +22,6 @@ import SPIManifest
2222

2323
class ArrayExtensionTests: XCTestCase {
2424

25-
func test_map_Result_to_EventLoopFuture() throws {
26-
// setup
27-
let elg = MultiThreadedEventLoopGroup(numberOfThreads: 1)
28-
let results = [0, 1, 2].map { Result<Int, Error>.success($0) }
29-
30-
// MUT
31-
let mapped = results.map(on: elg.next()) {
32-
elg.future(String($0))
33-
}
34-
35-
// validate
36-
let res = try mapped.flatten(on: elg.next()).wait()
37-
XCTAssertEqual(res, ["0", "1", "2"])
38-
}
39-
40-
func test_map_Result_to_EventLoopFuture_with_errors() throws {
41-
// setup
42-
enum MyError: Error, Equatable { case failed }
43-
let elg = MultiThreadedEventLoopGroup(numberOfThreads: 1)
44-
let results: [Result<Int, MyError>] = [
45-
.success(0),
46-
.failure(MyError.failed),
47-
.success(2)
48-
]
49-
50-
// MUT
51-
let mapped = results.map(on: elg.next()) {
52-
elg.future(String($0))
53-
}
54-
55-
// validate
56-
XCTAssertEqual(try mapped[0].wait(), "0")
57-
XCTAssertThrowsError(try mapped[1].wait()) {
58-
XCTAssertEqual($0 as? MyError, MyError.failed)
59-
}
60-
XCTAssertEqual(try mapped[2].wait(), "2")
61-
}
62-
63-
func test_whenAllComplete() throws {
64-
// setup
65-
let elg = MultiThreadedEventLoopGroup(numberOfThreads: 1)
66-
let results = [0, 1, 2].map { Result<Int, Error>.success($0) }
67-
68-
// MUT
69-
let res = try results.whenAllComplete(on: elg.next()) {
70-
elg.future(String($0))
71-
}.wait()
72-
73-
// validate
74-
XCTAssertEqual(res.compactMap { try? $0.get() }, ["0", "1", "2"])
75-
}
76-
77-
func test_whenAllComplete_with_errors() throws {
78-
// setup
79-
enum MyError: Error { case failed }
80-
let elg = MultiThreadedEventLoopGroup(numberOfThreads: 1)
81-
let results: [Result<Int, Error>] = [
82-
.success(0),
83-
.failure(MyError.failed),
84-
.success(2)
85-
]
86-
87-
// MUT
88-
let res = try results.whenAllComplete(on: elg.next()) {
89-
elg.future(String($0))
90-
}.wait()
91-
92-
// validate
93-
XCTAssertEqual(res.compactMap { try? $0.get() }, ["0", "2"])
94-
}
95-
9625
func test_defaultBranchVersion() throws {
9726
XCTAssertEqual(
9827
[

Tests/AppTests/IngestorTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ class IngestorTests: AppTestCase {
265265
Package(id: UUID(), url: "https://github.com/foo/1", status: .ok, processingStage: .reconciliation),
266266
Package(id: UUID(), url: "https://github.com/foo/2", status: .new, processingStage: .reconciliation)
267267
]
268-
try await pkgs.save(on: app.db).get()
268+
try await pkgs.save(on: app.db)
269269
let results: [Result<Joined<Package, Repository>, Error>] = [ .success(.init(model: pkgs[0])),
270270
.success(.init(model: pkgs[1]))]
271271

Tests/AppTests/PackageTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,18 +242,18 @@ final class PackageTests: AppTestCase {
242242
)
243243
}
244244

245-
func test_findSignificantReleases_old_beta() throws {
245+
func test_findSignificantReleases_old_beta() async throws {
246246
// Test to ensure outdated betas aren't picked up as latest versions
247247
// setup
248248
let pkg = Package(id: UUID(), url: "1")
249-
try pkg.save(on: app.db).wait()
250-
try Repository(package: pkg, defaultBranch: "main").save(on: app.db).wait()
249+
try await pkg.save(on: app.db)
250+
try await Repository(package: pkg, defaultBranch: "main").save(on: app.db)
251251
let versions = [
252252
try Version(package: pkg, packageName: "foo", reference: .branch("main")),
253253
try Version(package: pkg, packageName: "foo", reference: .tag(2, 0, 0)),
254254
try Version(package: pkg, packageName: "foo", reference: .tag(2, 0, 0, "rc1"))
255255
]
256-
try versions.save(on: app.db).wait()
256+
try await versions.save(on: app.db)
257257

258258
// MUT
259259
let (release, preRelease, defaultBranch) = Package.findSignificantReleases(versions: versions, branch: "main")

0 commit comments

Comments
 (0)