From badc6dd39eb3ec22aa70328e351c03d64b0217ce Mon Sep 17 00:00:00 2001 From: a dinosaur Date: Sat, 16 Nov 2024 00:57:28 +1100 Subject: [PATCH] Don't know if I'm a fan, but async'ing RepositoriesConfig is simpler --- Sources/dpk-cli/RepositoriesConfig.swift | 27 ++++++++---------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/Sources/dpk-cli/RepositoriesConfig.swift b/Sources/dpk-cli/RepositoriesConfig.swift index b8aaf28..df4c258 100644 --- a/Sources/dpk-cli/RepositoriesConfig.swift +++ b/Sources/dpk-cli/RepositoriesConfig.swift @@ -11,25 +11,16 @@ struct RepositoriesConfig { let repositories: [ApkIndexRepository] init() async throws(ExitCode) { - let repositories: [String], architectures: [String] do { - repositories = try await Self.read(name: "repositories") + self.repositories = try await Self.readConfig(name: "repositories").flatMap { repo in + Self.readConfig(name: "arch").map { arch in + ApkIndexRepository(name: repo, arch: arch) + } + }.reduce(into: []) { $0.append($1) } } catch { - print("Failed to read repositories: \(error.localizedDescription)") + print("Failed to read repository configurations, \(error.localizedDescription)") throw .failure } - do { - architectures = try await Self.read(name: "arch") - } catch { - print("Failed to read arch: \(error.localizedDescription)") - throw .failure - } - - self.repositories = repositories.flatMap { repo in - architectures.map { arch in - ApkIndexRepository(name: repo, arch: arch) - } - } } var localRepositories: [URL] { @@ -38,10 +29,10 @@ struct RepositoriesConfig { } } - private static func read(name: String) async throws -> [String] { - try await URL(filePath: name, directoryHint: .notDirectory).lines + private static func readConfig(name: String) + -> AsyncFilterSequence, String>> { + return URL(filePath: name, directoryHint: .notDirectory).lines .map { $0.trimmingCharacters(in: .whitespaces) } .filter { !$0.isEmpty && $0.first != "#" } // Ignore empty & commented lines - .reduce(into: [String]()) { $0.append($1) } } }