@@ -35,7 +35,9 @@ extension ModulesGraph {
35
35
customXCTestMinimumDeploymentTargets: [ PackageModel . Platform : PlatformVersion ] ? = . none,
36
36
testEntryPointPath: AbsolutePath ? = nil ,
37
37
fileSystem: FileSystem ,
38
- observabilityScope: ObservabilityScope
38
+ observabilityScope: ObservabilityScope ,
39
+ productsFilter: ( ( Product ) -> Bool ) ? ,
40
+ modulesFilter: ( ( Module ) -> Bool ) ?
39
41
) throws -> ModulesGraph {
40
42
try Self . load (
41
43
root: root,
@@ -52,7 +54,9 @@ extension ModulesGraph {
52
54
customXCTestMinimumDeploymentTargets: customXCTestMinimumDeploymentTargets,
53
55
testEntryPointPath: testEntryPointPath,
54
56
fileSystem: fileSystem,
55
- observabilityScope: observabilityScope
57
+ observabilityScope: observabilityScope,
58
+ productsFilter: productsFilter,
59
+ modulesFilter: modulesFilter
56
60
)
57
61
}
58
62
@@ -72,7 +76,9 @@ extension ModulesGraph {
72
76
customXCTestMinimumDeploymentTargets: [ PackageModel . Platform : PlatformVersion ] ? = . none,
73
77
testEntryPointPath: AbsolutePath ? = nil ,
74
78
fileSystem: FileSystem ,
75
- observabilityScope: ObservabilityScope
79
+ observabilityScope: ObservabilityScope ,
80
+ productsFilter: ( ( Product ) -> Bool ) ? = nil ,
81
+ modulesFilter: ( ( Module ) -> Bool ) ? = nil
76
82
) throws -> ModulesGraph {
77
83
let observabilityScope = observabilityScope. makeChildScope ( description: " Loading Package Graph " )
78
84
@@ -243,7 +249,9 @@ extension ModulesGraph {
243
249
platformRegistry: customPlatformsRegistry ?? . default,
244
250
platformVersionProvider: platformVersionProvider,
245
251
fileSystem: fileSystem,
246
- observabilityScope: observabilityScope
252
+ observabilityScope: observabilityScope,
253
+ productsFilter: productsFilter,
254
+ modulesFilter: modulesFilter
247
255
)
248
256
249
257
let rootPackages = resolvedPackages. filter { root. manifests. values. contains ( $0. manifest) }
@@ -372,7 +380,9 @@ private func createResolvedPackages(
372
380
platformRegistry: PlatformRegistry ,
373
381
platformVersionProvider: PlatformVersionProvider ,
374
382
fileSystem: FileSystem ,
375
- observabilityScope: ObservabilityScope
383
+ observabilityScope: ObservabilityScope ,
384
+ productsFilter: ( ( Product ) -> Bool ) ? ,
385
+ modulesFilter: ( ( Module ) -> Bool ) ?
376
386
) throws -> IdentifiableSet < ResolvedPackage > {
377
387
378
388
// Create package builder objects from the input manifests.
@@ -503,7 +513,13 @@ private func createResolvedPackages(
503
513
)
504
514
505
515
// Create module builders for each module in the package.
506
- let moduleBuilders = package . modules. map {
516
+ let modules : [ Module ]
517
+ if let modulesFilter {
518
+ modules = package . modules. filter ( modulesFilter)
519
+ } else {
520
+ modules = package . modules
521
+ }
522
+ let moduleBuilders = modules. map {
507
523
ResolvedModuleBuilder (
508
524
packageIdentity: package . identity,
509
525
module: $0,
@@ -533,8 +549,15 @@ private func createResolvedPackages(
533
549
}
534
550
535
551
// Create product builders for each product in the package. A product can only contain a module present in the same package.
536
- packageBuilder. products = try package . products. map {
537
- try ResolvedProductBuilder ( product: $0, packageBuilder: packageBuilder, moduleBuilders: $0. modules. map {
552
+ let products : [ Product ]
553
+ if let productsFilter {
554
+ products = package . products. filter ( productsFilter)
555
+ } else {
556
+ products = package . products
557
+ }
558
+
559
+ packageBuilder. products = try products. map { product in
560
+ try ResolvedProductBuilder ( product: product, packageBuilder: packageBuilder, moduleBuilders: product. modules. map {
538
561
guard let module = modulesMap [ $0] else {
539
562
throw InternalError ( " unknown target \( $0) " )
540
563
}
0 commit comments