Skip to content

Commit 69da8c0

Browse files
Removed product filters from all persistent files. (#2794)
1 parent 884d878 commit 69da8c0

File tree

6 files changed

+69
-128
lines changed

6 files changed

+69
-128
lines changed

Sources/SPMTestSupport/TestWorkspace.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,15 +346,15 @@ public final class TestWorkspace {
346346
}
347347

348348
public func set(
349-
pins: [PackageReference: (version: CheckoutState, products: ProductFilter)] = [:],
349+
pins: [PackageReference: CheckoutState] = [:],
350350
managedDependencies: [ManagedDependency] = [],
351351
managedArtifacts: [ManagedArtifact] = []
352352
) throws {
353353
let workspace = createWorkspace()
354354
let pinsStore = try workspace.pinsStore.load()
355355

356356
for (ref, state) in pins {
357-
pinsStore.pin(packageRef: ref, state: state.version)
357+
pinsStore.pin(packageRef: ref, state: state)
358358
}
359359

360360
for dependency in managedDependencies {

Sources/Workspace/ResolverPrecomputationProvider.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ struct ResolverPrecomputationProvider: PackageContainerProvider {
6161
completion: @escaping (Result<PackageContainer, Error>) -> Void
6262
) {
6363
// Start by searching manifests from the Workspace's resolved dependencies.
64-
if let manifest = dependencyManifests.dependencies.first(where: { $1.packageRef == identifier }) {
64+
if let manifest = dependencyManifests.dependencies.first(where: { _, managed, _ in managed.packageRef == identifier }) {
6565
let container = LocalPackageContainer(
6666
package: identifier,
6767
manifest: manifest.manifest,

Sources/Workspace/Workspace.swift

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,13 @@ public class Workspace {
139139
let root: PackageGraphRoot
140140

141141
/// The dependency manifests in the transitive closure of root manifest.
142-
let dependencies: [(manifest: Manifest, dependency: ManagedDependency)]
142+
let dependencies: [(manifest: Manifest, dependency: ManagedDependency, productFilter: ProductFilter)]
143143

144144
let workspace: Workspace
145145

146146
fileprivate init(
147147
root: PackageGraphRoot,
148-
dependencies: [(Manifest, ManagedDependency)],
148+
dependencies: [(Manifest, ManagedDependency, ProductFilter)],
149149
workspace: Workspace
150150
) {
151151
self.root = root
@@ -244,7 +244,7 @@ public class Workspace {
244244
func dependencyConstraints() -> [RepositoryPackageConstraint] {
245245
var allConstraints = [RepositoryPackageConstraint]()
246246

247-
for (externalManifest, managedDependency) in dependencies {
247+
for (externalManifest, managedDependency, productFilter) in dependencies {
248248
// For edited packages, add a constraint with unversioned requirement so the
249249
// resolver doesn't try to resolve it.
250250
switch managedDependency.state {
@@ -259,13 +259,13 @@ public class Workspace {
259259
let constraint = RepositoryPackageConstraint(
260260
container: ref,
261261
requirement: .unversioned,
262-
products: managedDependency.productFilter)
262+
products: productFilter)
263263
allConstraints.append(constraint)
264264
case .checkout, .local:
265265
break
266266
}
267267
allConstraints += externalManifest.dependencyConstraints(
268-
productFilter: managedDependency.productFilter,
268+
productFilter: productFilter,
269269
config: workspace.config
270270
)
271271
}
@@ -277,7 +277,7 @@ public class Workspace {
277277
public func editedPackagesConstraints() -> [RepositoryPackageConstraint] {
278278
var constraints = [RepositoryPackageConstraint]()
279279

280-
for (_, managedDependency) in dependencies {
280+
for (_, managedDependency, productFilter) in dependencies {
281281
switch managedDependency.state {
282282
case .checkout, .local: continue
283283
case .edited: break
@@ -292,7 +292,7 @@ public class Workspace {
292292
let constraint = RepositoryPackageConstraint(
293293
container: ref,
294294
requirement: .unversioned,
295-
products: managedDependency.productFilter)
295+
products: productFilter)
296296
constraints.append(constraint)
297297
}
298298
return constraints
@@ -568,7 +568,8 @@ extension Workspace {
568568
requirement = currentState.requirement()
569569
}
570570
let constraint = RepositoryPackageConstraint(
571-
container: dependency.packageRef, requirement: requirement, products: dependency.productFilter)
571+
// If any products are required, the rest of the package graph will supply those constraints.
572+
container: dependency.packageRef, requirement: requirement, products: .specific([]))
572573

573574
// Run the resolution.
574575
_resolve(root: root, forceResolution: false, extraConstraints: [constraint], diagnostics: diagnostics)
@@ -1039,12 +1040,11 @@ extension Workspace {
10391040
try fileSystem.removeFileTree(editablesPath)
10401041
}
10411042

1042-
if let checkoutState = dependency.basedOn?.checkoutState,
1043-
let productFilter = dependency.basedOn?.productFilter {
1043+
if let checkoutState = dependency.basedOn?.checkoutState {
10441044
// Restore the original checkout.
10451045
//
10461046
// The clone method will automatically update the managed dependency state.
1047-
_ = try clone(package: dependency.packageRef, at: checkoutState, productFilter: productFilter)
1047+
_ = try clone(package: dependency.packageRef, at: checkoutState)
10481048
} else {
10491049
// The original dependency was removed, update the managed dependency state.
10501050
state.dependencies.remove(forURL: dependency.packageRef.path)
@@ -1191,17 +1191,17 @@ extension Workspace {
11911191
var loadedManifests = [String: Manifest]()
11921192

11931193
// Compute the transitive closure of available dependencies.
1194-
let allManifests = try! topologicalSort(inputManifests.map({ KeyedPair($0, key: $0.name) })) { node in
1195-
return node.item.dependencies.compactMap({ dependency in
1196-
let url = config.mirroredURL(forURL: dependency.url)
1194+
let allManifests = try! topologicalSort(inputManifests.map({ KeyedPair(($0, ProductFilter.everything), key: $0.name)})) { node in
1195+
return node.item.0.dependenciesRequired(for: node.item.1).compactMap({ dependency in
1196+
let url = config.mirroredURL(forURL: dependency.declaration.url)
11971197
let manifest = loadedManifests[url] ?? loadManifest(forURL: url, diagnostics: diagnostics)
11981198
loadedManifests[url] = manifest
1199-
return manifest.flatMap({ KeyedPair($0, key: $0.name) })
1199+
return manifest.flatMap({ KeyedPair(($0, dependency.productFilter), key: $0.name) })
12001200
})
12011201
}
12021202

1203-
let allDependencyManifests = allManifests.map({ $0.item }).filter({ !root.manifests.contains($0) })
1204-
let deps = allDependencyManifests.map({ ($0, state.dependencies[forURL: $0.url]!) })
1203+
let allDependencyManifests = allManifests.map({ $0.item }).filter({ !root.manifests.contains($0.0) })
1204+
let deps = allDependencyManifests.map({ ($0, state.dependencies[forURL: $0.url]!, $1) })
12051205

12061206
return DependencyManifests(root: root, dependencies: deps, workspace: self)
12071207
}
@@ -1365,7 +1365,7 @@ extension Workspace {
13651365
private func artifacts(from manifests: DependencyManifests) -> [ManagedArtifact] {
13661366
let packageAndManifests: [(PackageReference, Manifest)] =
13671367
zip(manifests.root.packageRefs, manifests.root.manifests) + // Root package and manifests.
1368-
manifests.dependencies.map({ ($1.packageRef, $0) }) // Dependency package and manifests.
1368+
manifests.dependencies.map({ manifest, managed, _ in (managed.packageRef, manifest) }) // Dependency package and manifests.
13691369

13701370
var artifacts: [ManagedArtifact] = []
13711371

@@ -1541,7 +1541,7 @@ extension Workspace {
15411541
// Clone the required pins.
15421542
for pin in requiredPins {
15431543
diagnostics.wrap {
1544-
_ = try self.clone(package: pin.packageRef, at: pin.state, productFilter: .everything)
1544+
_ = try self.clone(package: pin.packageRef, at: pin.state)
15451545
}
15461546
}
15471547

@@ -1552,7 +1552,7 @@ extension Workspace {
15521552
let dependencies = rootManifest.dependencies.filter{ $0.requirement == .localPackage }
15531553
for localPackage in dependencies {
15541554
let package = localPackage.createPackageRef(config: self.config)
1555-
state.dependencies.add(ManagedDependency.local(packageRef: package, productFilter: .everything))
1555+
state.dependencies.add(ManagedDependency.local(packageRef: package))
15561556
}
15571557
}
15581558
diagnostics.wrap { try state.saveState() }
@@ -2090,7 +2090,7 @@ extension Workspace {
20902090
switch dependency.state {
20912091
case .checkout(let checkoutState):
20922092
// If some checkout dependency has been removed, clone it again.
2093-
_ = try clone(package: dependency.packageRef, at: checkoutState, productFilter: dependency.productFilter)
2093+
_ = try clone(package: dependency.packageRef, at: checkoutState)
20942094
diagnostics.emit(.checkedOutDependencyMissing(packageName: dependency.packageRef.name))
20952095

20962096
case .edited:
@@ -2235,8 +2235,7 @@ extension Workspace {
22352235
/// - Throws: If the operation could not be satisfied.
22362236
func clone(
22372237
package: PackageReference,
2238-
at checkoutState: CheckoutState,
2239-
productFilter: ProductFilter
2238+
at checkoutState: CheckoutState
22402239
) throws -> AbsolutePath {
22412240
// Get the repository.
22422241
let path = try fetch(package: package)
@@ -2256,8 +2255,7 @@ extension Workspace {
22562255
state.dependencies.add(ManagedDependency(
22572256
packageRef: package,
22582257
subpath: path.relative(to: checkoutsPath),
2259-
checkoutState: checkoutState,
2260-
productFilter: productFilter))
2258+
checkoutState: checkoutState))
22612259
try state.saveState()
22622260

22632261
return path
@@ -2287,12 +2285,12 @@ extension Workspace {
22872285
checkoutState = CheckoutState(revision: revision, branch: branch)
22882286

22892287
case .unversioned:
2290-
state.dependencies.add(ManagedDependency.local(packageRef: package, productFilter: productFilter))
2288+
state.dependencies.add(ManagedDependency.local(packageRef: package))
22912289
try state.saveState()
22922290
return AbsolutePath(package.path)
22932291
}
22942292

2295-
return try self.clone(package: package, at: checkoutState, productFilter: productFilter)
2293+
return try self.clone(package: package, at: checkoutState)
22962294
}
22972295

22982296
/// Removes the clone and checkout of the provided specifier.

Sources/Workspace/WorkspaceState.swift

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,6 @@ public final class ManagedDependency {
4949
/// The state of the managed dependency.
5050
public let state: State
5151

52-
/// The product filter applied to the package.
53-
public let productFilter: ProductFilter
54-
5552
/// The checked out path of the dependency on disk, relative to the workspace checkouts path.
5653
public let subpath: RelativePath
5754

@@ -65,25 +62,21 @@ public final class ManagedDependency {
6562
public init(
6663
packageRef: PackageReference,
6764
subpath: RelativePath,
68-
checkoutState: CheckoutState,
69-
productFilter: ProductFilter
65+
checkoutState: CheckoutState
7066
) {
7167
self.packageRef = packageRef
7268
self.state = .checkout(checkoutState)
73-
self.productFilter = productFilter
7469
self.basedOn = nil
7570
self.subpath = subpath
7671
}
7772

7873
/// Create a dependency present locally on the filesystem.
7974
public static func local(
80-
packageRef: PackageReference,
81-
productFilter: ProductFilter
75+
packageRef: PackageReference
8276
) -> ManagedDependency {
8377
return ManagedDependency(
8478
packageRef: packageRef,
8579
state: .local,
86-
productFilter: productFilter,
8780
// FIXME: This is just a fake entry, we should fix it.
8881
subpath: RelativePath(packageRef.identity),
8982
basedOn: nil
@@ -93,15 +86,13 @@ public final class ManagedDependency {
9386
private init(
9487
packageRef: PackageReference,
9588
state: State,
96-
productFilter: ProductFilter,
9789
subpath: RelativePath,
9890
basedOn: ManagedDependency?
9991
) {
10092
self.packageRef = packageRef
10193
self.subpath = subpath
10294
self.basedOn = basedOn
10395
self.state = state
104-
self.productFilter = productFilter
10596
}
10697

10798
private init(
@@ -114,7 +105,6 @@ public final class ManagedDependency {
114105
self.packageRef = dependency.packageRef
115106
self.subpath = subpath
116107
self.state = .edited(unmanagedPath)
117-
self.productFilter = dependency.productFilter
118108
}
119109

120110
/// Create an editable managed dependency based on a dependency which
@@ -358,7 +348,6 @@ extension ManagedDependency: JSONMappable, JSONSerializable, CustomStringConvert
358348
try self.init(
359349
packageRef: json.get("packageRef"),
360350
state: json.get("state"),
361-
productFilter: json.get("products"),
362351
subpath: RelativePath(json.get("subpath")),
363352
basedOn: json.get("basedOn")
364353
)
@@ -369,13 +358,12 @@ extension ManagedDependency: JSONMappable, JSONSerializable, CustomStringConvert
369358
"packageRef": packageRef.toJSON(),
370359
"subpath": subpath,
371360
"basedOn": basedOn.toJSON(),
372-
"state": state,
373-
"products": productFilter
361+
"state": state
374362
])
375363
}
376364

377365
public var description: String {
378-
return "<ManagedDependency: \(packageRef.name) \(state) \(productFilter)>"
366+
return "<ManagedDependency: \(packageRef.name) \(state)>"
379367
}
380368
}
381369

Tests/WorkspaceTests/PinsStoreTests.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ final class PinsStoreTests: XCTestCase {
3232
let barRef = PackageReference(identity: bar, path: barRepo.url)
3333

3434
let state = CheckoutState(revision: revision, version: v1)
35-
let products: ProductFilter = .everything
3635
let pin = PinsStore.Pin(packageRef: fooRef, state: state)
3736
// We should be able to round trip from JSON.
3837
XCTAssertEqual(try PinsStore.Pin(json: pin.toJSON()), pin)
@@ -120,8 +119,7 @@ final class PinsStoreTests: XCTestCase {
120119
"branch": null,
121120
"revision": "90a9574276f0fd17f02f58979423c3fd4d73b59e",
122121
"version": "1.0.2",
123-
},
124-
"products": ["a", "b"]
122+
}
125123
},
126124
{
127125
"package": "Commandant",
@@ -130,8 +128,7 @@ final class PinsStoreTests: XCTestCase {
130128
"branch": null,
131129
"revision": "c281992c31c3f41c48b5036c5a38185eaec32626",
132130
"version": "0.12.0"
133-
},
134-
"products": "all"
131+
}
135132
}
136133
]
137134
},

0 commit comments

Comments
 (0)