From d3cdfec4c8ed00c779ae13715ecddefdec759450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?furby=E2=84=A2?= Date: Thu, 31 Oct 2024 05:55:15 -0600 Subject: [PATCH] Fix to compile & run with Swift 6+. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: furby™ --- .gitignore | 2 ++ .../PackageCollectionGenerate.swift | 26 ++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 2cf50b8..e49dad4 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ xcuserdata/ Package.resolved .swift-version + +.vscode diff --git a/Sources/PackageCollectionGenerator/PackageCollectionGenerate.swift b/Sources/PackageCollectionGenerator/PackageCollectionGenerate.swift index 6a6fbcf..e7ffc77 100644 --- a/Sources/PackageCollectionGenerator/PackageCollectionGenerate.swift +++ b/Sources/PackageCollectionGenerator/PackageCollectionGenerate.swift @@ -23,7 +23,7 @@ import TSCUtility import Utilities @main -public struct PackageCollectionGenerate: ParsableCommand { +public struct PackageCollectionGenerate: AsyncParsableCommand { public static let configuration = CommandConfiguration( abstract: "Generate a package collection from the given list of packages." ) @@ -65,7 +65,7 @@ public struct PackageCollectionGenerate: ParsableCommand { public init() {} - public func run() throws { + public func run() async throws { Backtrace.install() // Parse auth tokens @@ -91,9 +91,9 @@ public struct PackageCollectionGenerate: ParsableCommand { let githubPackageMetadataProvider = GitHubPackageMetadataProvider(authTokens: authTokens) // Generate metadata for each package - let packages: [Model.Collection.Package] = input.packages.compactMap { package in + let packages: [Model.Collection.Package] = await input.packages.asyncMap { package in do { - let packageMetadata = try self.generateMetadata(for: package, metadataProvider: githubPackageMetadataProvider, jsonDecoder: jsonDecoder) + let packageMetadata = try await self.generateMetadata(for: package, metadataProvider: githubPackageMetadataProvider, jsonDecoder: jsonDecoder) print("\(packageMetadata)", verbose: self.verbose) guard !packageMetadata.versions.isEmpty else { @@ -147,7 +147,7 @@ public struct PackageCollectionGenerate: ParsableCommand { private func generateMetadata(for package: PackageCollectionGeneratorInput.Package, metadataProvider: PackageMetadataProvider, - jsonDecoder: JSONDecoder) throws -> Model.Collection.Package { + jsonDecoder: JSONDecoder) async throws -> Model.Collection.Package { print("Processing Package(\(package.url))", inColor: .cyan, verbose: self.verbose) // Try to locate the directory where the repository might have been cloned to previously @@ -207,7 +207,9 @@ public struct PackageCollectionGenerate: ParsableCommand { jsonDecoder: JSONDecoder) throws -> Model.Collection.Package { var additionalMetadata: PackageBasicMetadata? do { - additionalMetadata = try temp_await { callback in metadataProvider.get(package.url, callback: callback) } + try metadataProvider.get(package.url) { callback in + additionalMetadata = callback.success + } } catch { printError("Failed to fetch additional metadata: \(error)") } @@ -419,3 +421,15 @@ extension PackageCollectionModel.V1.ProductType.LibraryType { } } } + +extension Sequence { + func asyncMap( _ transform: (Element) async throws -> Optional ) async rethrows -> [T] { + var values = [T]() + for element in self { + if let element = try await transform(element) { + try values.append(element) + } + } + return values + } +}