Skip to content

Commit 4f8700b

Browse files
authored
Merge pull request #2575 from aciidb0mb3r/resolved-file-5.2
[Resolver] Don't prefetch overridden packages
2 parents 2350b97 + c1c5f0b commit 4f8700b

File tree

4 files changed

+97
-6
lines changed

4 files changed

+97
-6
lines changed

Sources/PackageGraph/Pubgrub.swift

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -905,12 +905,6 @@ public final class PubgrubDependencyResolver {
905905
self.root = root
906906
self.pinsMap = pinsMap
907907

908-
// Prefetch the containers if prefetching is enabled.
909-
if isPrefetchingEnabled {
910-
let pins = pinsMap.values.map{ $0.packageRef }
911-
self.provider.prefetch(containers: pins)
912-
}
913-
914908
// Add the root incompatibility.
915909
let rootIncompatibility = Incompatibility(
916910
terms: [Term(not: root, .exact("1.0.0"))],
@@ -921,6 +915,17 @@ public final class PubgrubDependencyResolver {
921915
let inputs = try processInputs(with: constraints)
922916
self.overriddenPackages = inputs.overriddenPackages
923917

918+
// Prefetch the containers if prefetching is enabled.
919+
if isPrefetchingEnabled {
920+
// We avoid prefetching packages that are overridden since
921+
// otherwise we'll end up creating a repository container
922+
// for them.
923+
let pins = pinsMap.values
924+
.map{ $0.packageRef }
925+
.filter{ !overriddenPackages.keys.contains($0) }
926+
self.provider.prefetch(containers: pins)
927+
}
928+
924929
// Add all the root incompatibilities.
925930
for incompat in inputs.rootIncompatibilities {
926931
add(incompat, location: .topLevel)

Sources/SPMTestSupport/TestWorkspace.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ public final class TestWorkspace {
154154
config: config,
155155
fileSystem: fs,
156156
repositoryProvider: repoProvider,
157+
isResolverPrefetchingEnabled: true,
157158
enablePubgrubResolver: enablePubGrub,
158159
skipUpdate: skipUpdate
159160
)

Tests/WorkspaceTests/WorkspaceTests.swift

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2419,6 +2419,90 @@ final class WorkspaceTests: XCTestCase {
24192419
}
24202420
}
24212421

2422+
func testPrefetchingWithOverridenPackage() throws {
2423+
let sandbox = AbsolutePath("/tmp/ws/")
2424+
let fs = InMemoryFileSystem()
2425+
2426+
let workspace = try TestWorkspace(
2427+
sandbox: sandbox,
2428+
fs: fs,
2429+
roots: [
2430+
TestPackage(
2431+
name: "Root",
2432+
targets: [
2433+
TestTarget(name: "Root", dependencies: ["Foo"]),
2434+
],
2435+
products: [],
2436+
dependencies: [
2437+
TestDependency(name: "Foo", requirement: .upToNextMajor(from: "1.0.0")),
2438+
]
2439+
),
2440+
],
2441+
packages: [
2442+
TestPackage(
2443+
name: "Foo",
2444+
targets: [
2445+
TestTarget(name: "Foo"),
2446+
],
2447+
products: [
2448+
TestProduct(name: "Foo", targets: ["Foo"]),
2449+
],
2450+
versions: ["1.0.0"]
2451+
),
2452+
TestPackage(
2453+
name: "Foo",
2454+
targets: [
2455+
TestTarget(name: "Foo", dependencies: ["Bar"]),
2456+
],
2457+
products: [
2458+
TestProduct(name: "Foo", targets: ["Foo"]),
2459+
],
2460+
dependencies: [
2461+
TestDependency(name: "Bar", requirement: .upToNextMajor(from: "1.0.0")),
2462+
],
2463+
versions: [nil]
2464+
),
2465+
TestPackage(
2466+
name: "Bar",
2467+
targets: [
2468+
TestTarget(name: "Bar"),
2469+
],
2470+
products: [
2471+
TestProduct(name: "Bar", targets: ["Bar"]),
2472+
],
2473+
versions: ["1.0.0"]
2474+
),
2475+
]
2476+
)
2477+
2478+
// Load the graph.
2479+
workspace.checkPackageGraph(roots: ["Root"]) { (graph, diagnostics) in
2480+
PackageGraphTester(graph) { result in
2481+
result.check(roots: "Root")
2482+
result.check(packages: "Foo", "Root")
2483+
}
2484+
XCTAssertNoDiagnostics(diagnostics)
2485+
}
2486+
workspace.checkManagedDependencies() { result in
2487+
result.check(dependency: "foo", at: .checkout(.version("1.0.0")))
2488+
}
2489+
2490+
let deps: [TestWorkspace.PackageDependency] = [
2491+
.init(name: "Foo", requirement: .localPackage),
2492+
]
2493+
workspace.checkPackageGraph(roots: ["Root"], deps: deps) { (graph, diagnostics) in
2494+
PackageGraphTester(graph) { result in
2495+
result.check(roots: "Root")
2496+
result.check(packages: "Foo", "Bar", "Root")
2497+
}
2498+
XCTAssertNoDiagnostics(diagnostics)
2499+
}
2500+
workspace.checkManagedDependencies() { result in
2501+
result.check(dependency: "foo", at: .local)
2502+
result.check(dependency: "bar", at: .checkout(.version("1.0.0")))
2503+
}
2504+
}
2505+
24222506
// Test that changing a particular dependency re-resolves the graph.
24232507
func testChangeOneDependency() throws {
24242508
let sandbox = AbsolutePath("/tmp/ws/")

Tests/WorkspaceTests/XCTestManifests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ extension WorkspaceTests {
8181
("testPrecomputeResolution_requirementChange_versionToBranch", testPrecomputeResolution_requirementChange_versionToBranch),
8282
("testPrecomputeResolution_requirementChange_versionToLocal", testPrecomputeResolution_requirementChange_versionToLocal),
8383
("testPrecomputeResolution_requirementChange_versionToRevision", testPrecomputeResolution_requirementChange_versionToRevision),
84+
("testPrefetchingWithOverridenPackage", testPrefetchingWithOverridenPackage),
8485
("testResolutionFailureWithEditedDependency", testResolutionFailureWithEditedDependency),
8586
("testResolve", testResolve),
8687
("testResolvedFileUpdate", testResolvedFileUpdate),

0 commit comments

Comments
 (0)