Skip to content

Commit c5d1d65

Browse files
committed
[PackageGraph] Replace products with computed property.
- This is a trivially derived property, using `makeNestedIterator`.
1 parent f0f5dbe commit c5d1d65

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

Sources/PackageGraph/PackageGraph.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,22 @@ public struct PackageGraph {
2525
// FIXME: These are temporary.
2626
public let modules: [Module]
2727
public let externalModules: Set<Module>
28-
public let products: [Product]
2928

3029
/// Construct a package graph directly.
31-
public init(rootPackage: Package, modules: [Module], externalModules: Set<Module>, products: [Product]) {
30+
public init(rootPackage: Package, modules: [Module], externalModules: Set<Module>) {
3231
self.rootPackage = rootPackage
3332
self.modules = modules
3433
self.externalModules = externalModules
35-
self.products = products
3634

3735
// This will leave the root package at the beginning, considering the relation we are providing.
3836
self.packages = try! topologicalSort([rootPackage], successors: { $0.dependencies })
3937
assert(self.rootPackage == self.packages[0])
4038
}
39+
40+
/// A sequence of all of the products in the graph.
41+
///
42+
/// This yields all products in topological order starting with the root package.
43+
public var products: AnySequence<Product> {
44+
return AnySequence(packages.lazy.flatMap{ $0.products })
45+
}
4146
}

Sources/PackageGraph/PackageGraphLoader.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ public struct PackageGraphLoader {
6868

6969
// Create the packages and convert to modules.
7070
var packages: [Package] = []
71-
var products: [Product] = []
7271
var map: [Package: [Module]] = [:]
7372
for (i, manifest) in allManifests.enumerated() {
7473
let isRootPackage = (i + 1) == allManifests.count
@@ -81,7 +80,6 @@ public struct PackageGraphLoader {
8180
let package = try Package.createUsingConventions(manifest: manifest, includingTestModules: isRootPackage)
8281
packages.append(package)
8382

84-
products += package.products
8583
map[package] = package.modules + package.testModules
8684

8785
// Diagnose empty non-root packages, which are something we allow as a special case.
@@ -117,7 +115,7 @@ public struct PackageGraphLoader {
117115
let modules = try recursiveDependencies(packages.flatMap{ map[$0] ?? [] })
118116
let externalModules = try recursiveDependencies(externalPackages.flatMap{ map[$0] ?? [] })
119117

120-
return PackageGraph(rootPackage: rootPackage, modules: modules, externalModules: Set(externalModules), products: products)
118+
return PackageGraph(rootPackage: rootPackage, modules: modules, externalModules: Set(externalModules))
121119
}
122120
}
123121

Tests/Build/DescribeTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ final class DescribeTests: XCTestCase {
3131
func testDescribingNoModulesThrows() {
3232
do {
3333
let tempDir = try TemporaryDirectory(removeTreeOnDeinit: true)
34-
let graph = PackageGraph(rootPackage: dummyPackage, modules: [], externalModules: [], products: [])
34+
let graph = PackageGraph(rootPackage: dummyPackage, modules: [], externalModules: [])
3535
_ = try describe(tempDir.path.appending("foo"), .debug, graph, flags: BuildFlags(), toolchain: InvalidToolchain())
3636
XCTFail("This call should throw")
3737
} catch Build.Error.noModules {
@@ -44,7 +44,7 @@ final class DescribeTests: XCTestCase {
4444
func testDescribingCModuleThrows() {
4545
do {
4646
let tempDir = try TemporaryDirectory(removeTreeOnDeinit: true)
47-
let graph = PackageGraph(rootPackage: dummyPackage, modules: [try CModule(name: "MyCModule", sources: Sources(paths: [], root: "/"), path: "/")], externalModules: [], products: [])
47+
let graph = PackageGraph(rootPackage: dummyPackage, modules: [try CModule(name: "MyCModule", sources: Sources(paths: [], root: "/"), path: "/")], externalModules: [])
4848
_ = try describe(tempDir.path.appending("foo"), .debug, graph, flags: BuildFlags(), toolchain: InvalidToolchain())
4949
XCTFail("This call should throw")
5050
} catch Build.Error.onlyCModule (let name) {

Tests/Xcodeproj/GenerateXcodeprojTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class GenerateXcodeprojTests: XCTestCase {
2727

2828
let projectName = "DummyProjectName"
2929
let dummyPackage = Package(manifest: Manifest(path: dstdir, url: dstdir.asString, package: PackageDescription.Package(name: "Foo"), products: [], version: nil))
30-
let graph = PackageGraph(rootPackage: dummyPackage, modules: try dummy(), externalModules: [], products: [])
30+
let graph = PackageGraph(rootPackage: dummyPackage, modules: try dummy(), externalModules: [])
3131
let outpath = try Xcodeproj.generate(dstdir: dstdir, projectName: projectName, graph: graph, options: XcodeprojOptions())
3232

3333
XCTAssertDirectoryExists(outpath)

0 commit comments

Comments
 (0)