Skip to content

Commit d22436c

Browse files
committed
Support additional dependencies in forced resolution mode
rdar://115630439
1 parent 21c6684 commit d22436c

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

Sources/Workspace/Workspace+Manifests.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -471,8 +471,9 @@ extension Workspace {
471471
let topologicalSortSuccessors: (KeyedPair<Manifest, Key>) throws -> [KeyedPair<Manifest, Key>] = { pair in
472472
// optimization: preload manifest we know about in parallel
473473
let dependenciesRequired = pair.item.dependenciesRequired(for: pair.key.productFilter)
474-
let dependenciesToLoad = dependenciesRequired.map(\.packageRef)
475-
.filter { !loadedManifests.keys.contains($0.identity) }
474+
let additionalDependencyReferences = root.dependencies.map { $0.packageRef }
475+
let dependenciesToLoad = (dependenciesRequired.map(\.packageRef)
476+
.filter { !loadedManifests.keys.contains($0.identity) }) + additionalDependencyReferences
476477
// pre-populate managed dependencies if we are asked to do so (this happens when resolving to a resolved
477478
// file)
478479
if automaticallyAddManagedDependencies {

Tests/WorkspaceTests/WorkspaceTests.swift

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5225,6 +5225,45 @@ final class WorkspaceTests: XCTestCase {
52255225
}
52265226
}
52275227

5228+
func testForceResolveToResolvedVersionsLocalPackageInAdditionalDependencies() throws {
5229+
let sandbox = AbsolutePath("/tmp/ws/")
5230+
let fs = InMemoryFileSystem()
5231+
5232+
let workspace = try MockWorkspace(
5233+
sandbox: sandbox,
5234+
fileSystem: fs,
5235+
roots: [
5236+
MockPackage(
5237+
name: "Root",
5238+
targets: [
5239+
MockTarget(name: "Root", dependencies: ["Foo"]),
5240+
],
5241+
products: [],
5242+
dependencies: []
5243+
),
5244+
],
5245+
packages: [
5246+
MockPackage(
5247+
name: "Foo",
5248+
targets: [
5249+
MockTarget(name: "Foo"),
5250+
],
5251+
products: [
5252+
MockProduct(name: "Foo", targets: ["Foo"]),
5253+
],
5254+
versions: [nil]
5255+
),
5256+
]
5257+
)
5258+
5259+
try workspace.checkPackageGraph(roots: ["Root"], dependencies: [.fileSystem(path: workspace.packagesDir.appending(component: "Foo"))], forceResolvedVersions: true) { _, diagnostics in
5260+
XCTAssertNoDiagnostics(diagnostics)
5261+
}
5262+
workspace.checkManagedDependencies { result in
5263+
result.check(dependency: "foo", at: .local)
5264+
}
5265+
}
5266+
52285267
// This verifies that the simplest possible loading APIs are available for package clients.
52295268
func testSimpleAPI() throws {
52305269
try testWithTemporaryDirectory { path in

0 commit comments

Comments
 (0)