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) } } }