Skip to content

Commit 740262c

Browse files
committed
Don’t set forceResolvedVersions to true when we have an index build directory
When `SwiftPMBuildSystem` operates on a ` .index-build` directory, it owns the checkouts and is thus also allowed to resolve the package versions. This is necessary
1 parent 13176b0 commit 740262c

File tree

3 files changed

+47
-22
lines changed

3 files changed

+47
-22
lines changed

Sources/SKSwiftPMWorkspace/SwiftPMBuildSystem.swift

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@ public actor SwiftPMBuildSystem {
128128
logger.log(level: diagnostic.severity.asLogLevel, "SwiftPM log: \(diagnostic.description)")
129129
})
130130

131+
/// Whether the SwiftPMBuildSystem may modify `Package.resolved` or not.
132+
///
133+
/// This is `false` if the `SwiftPMBuildSystem` is pointed at a `.index-build` directory that's independent of the
134+
/// user's build. In this case `SwiftPMBuildSystem` is allowed to clone repositories even if no `Package.resolved`
135+
/// exists.
136+
private let forceResolvedVersions: Bool
137+
131138
/// Creates a build system using the Swift Package Manager, if this workspace is a package.
132139
///
133140
/// - Parameters:
@@ -141,11 +148,13 @@ public actor SwiftPMBuildSystem {
141148
toolchainRegistry: ToolchainRegistry,
142149
fileSystem: FileSystem = localFileSystem,
143150
buildSetup: BuildSetup,
151+
forceResolvedVersions: Bool,
144152
reloadPackageStatusCallback: @escaping (ReloadPackageStatus) async -> Void = { _ in }
145153
) async throws {
146154
self.workspacePath = workspacePath
147155
self.fileSystem = fileSystem
148156
self.toolchainRegistry = toolchainRegistry
157+
self.forceResolvedVersions = forceResolvedVersions
149158

150159
guard let packageRoot = findPackageDirectory(containing: workspacePath, fileSystem) else {
151160
throw Error.noManifest(workspacePath: workspacePath)
@@ -213,7 +222,6 @@ public actor SwiftPMBuildSystem {
213222
}
214223
await delegate.filesDependenciesUpdated(filesWithUpdatedDependencies)
215224
}
216-
217225
try await reloadPackage()
218226
}
219227

@@ -226,6 +234,7 @@ public actor SwiftPMBuildSystem {
226234
url: URL,
227235
toolchainRegistry: ToolchainRegistry,
228236
buildSetup: BuildSetup,
237+
forceResolvedVersions: Bool,
229238
reloadPackageStatusCallback: @escaping (ReloadPackageStatus) async -> Void
230239
) async {
231240
do {
@@ -234,6 +243,7 @@ public actor SwiftPMBuildSystem {
234243
toolchainRegistry: toolchainRegistry,
235244
fileSystem: localFileSystem,
236245
buildSetup: buildSetup,
246+
forceResolvedVersions: forceResolvedVersions,
237247
reloadPackageStatusCallback: reloadPackageStatusCallback
238248
)
239249
} catch Error.noManifest {
@@ -247,10 +257,6 @@ public actor SwiftPMBuildSystem {
247257

248258
extension SwiftPMBuildSystem {
249259
public func generateBuildGraph() async throws {
250-
try self.workspace.resolve(
251-
root: PackageGraphRootInput(packages: [AbsolutePath(projectRoot)]),
252-
observabilityScope: observabilitySystem.topScope
253-
)
254260
try await self.reloadPackage()
255261
}
256262

@@ -266,7 +272,7 @@ extension SwiftPMBuildSystem {
266272

267273
let modulesGraph = try self.workspace.loadPackageGraph(
268274
rootInput: PackageGraphRootInput(packages: [AbsolutePath(projectRoot)]),
269-
forceResolvedVersions: true,
275+
forceResolvedVersions: forceResolvedVersions,
270276
observabilityScope: observabilitySystem.topScope
271277
)
272278

Sources/SourceKitLSP/Workspace.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,17 @@ public final class Workspace {
149149

150150
if let rootUrl = rootUri.fileURL, let rootPath = try? AbsolutePath(validating: rootUrl.path) {
151151
var options = options
152+
var forceResolvedVersions = true
152153
if options.indexOptions.enableBackgroundIndexing, options.buildSetup.path == nil {
153154
options.buildSetup.path = rootPath.appending(component: ".index-build")
155+
forceResolvedVersions = false
154156
}
155157
func createSwiftPMBuildSystem(rootUrl: URL) async -> SwiftPMBuildSystem? {
156158
return await SwiftPMBuildSystem(
157159
url: rootUrl,
158160
toolchainRegistry: toolchainRegistry,
159161
buildSetup: options.buildSetup,
162+
forceResolvedVersions: forceResolvedVersions,
160163
reloadPackageStatusCallback: reloadPackageStatusCallback
161164
)
162165
}

Tests/SKSwiftPMWorkspaceTests/SwiftPMBuildSystemTests.swift

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
5353
workspacePath: packageRoot,
5454
toolchainRegistry: tr,
5555
fileSystem: fs,
56-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
56+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
57+
forceResolvedVersions: true
5758
)
5859
)
5960
}
@@ -80,7 +81,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
8081
workspacePath: packageRoot,
8182
toolchainRegistry: tr,
8283
fileSystem: fs,
83-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
84+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
85+
forceResolvedVersions: true
8486
)
8587
)
8688
}
@@ -107,7 +109,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
107109
workspacePath: packageRoot,
108110
toolchainRegistry: ToolchainRegistry(toolchains: []),
109111
fileSystem: fs,
110-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
112+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
113+
forceResolvedVersions: true
111114
)
112115
)
113116
}
@@ -134,7 +137,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
134137
workspacePath: packageRoot,
135138
toolchainRegistry: tr,
136139
fileSystem: fs,
137-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
140+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
141+
forceResolvedVersions: true
138142
)
139143

140144
let aswift = packageRoot.appending(components: "Sources", "lib", "a.swift")
@@ -202,7 +206,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
202206
workspacePath: packageRoot,
203207
toolchainRegistry: tr,
204208
fileSystem: fs,
205-
buildSetup: config
209+
buildSetup: config,
210+
forceResolvedVersions: true
206211
)
207212

208213
let aswift = packageRoot.appending(components: "Sources", "lib", "a.swift")
@@ -239,7 +244,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
239244
workspacePath: packageRoot,
240245
toolchainRegistry: tr,
241246
fileSystem: fs,
242-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
247+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
248+
forceResolvedVersions: true
243249
)
244250

245251
let source = try resolveSymlinks(packageRoot.appending(component: "Package.swift"))
@@ -272,7 +278,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
272278
workspacePath: packageRoot,
273279
toolchainRegistry: tr,
274280
fileSystem: fs,
275-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
281+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
282+
forceResolvedVersions: true
276283
)
277284

278285
let aswift = packageRoot.appending(components: "Sources", "lib", "a.swift")
@@ -317,7 +324,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
317324
workspacePath: packageRoot,
318325
toolchainRegistry: tr,
319326
fileSystem: fs,
320-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
327+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
328+
forceResolvedVersions: true
321329
)
322330

323331
let aswift = packageRoot.appending(components: "Sources", "libA", "a.swift")
@@ -379,7 +387,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
379387
workspacePath: packageRoot,
380388
toolchainRegistry: tr,
381389
fileSystem: fs,
382-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
390+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
391+
forceResolvedVersions: true
383392
)
384393

385394
let aswift = packageRoot.appending(components: "Sources", "libA", "a.swift")
@@ -419,7 +428,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
419428
workspacePath: packageRoot,
420429
toolchainRegistry: tr,
421430
fileSystem: fs,
422-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
431+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
432+
forceResolvedVersions: true
423433
)
424434

425435
let acxx = packageRoot.appending(components: "Sources", "lib", "a.cpp")
@@ -498,7 +508,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
498508
workspacePath: packageRoot,
499509
toolchainRegistry: ToolchainRegistry.forTesting,
500510
fileSystem: fs,
501-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
511+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
512+
forceResolvedVersions: true
502513
)
503514

504515
let aswift = packageRoot.appending(components: "Sources", "lib", "a.swift")
@@ -545,7 +556,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
545556
workspacePath: packageRoot,
546557
toolchainRegistry: tr,
547558
fileSystem: fs,
548-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
559+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
560+
forceResolvedVersions: true
549561
)
550562

551563
let aswift1 = packageRoot.appending(components: "Sources", "lib", "a.swift")
@@ -609,7 +621,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
609621
workspacePath: symlinkRoot,
610622
toolchainRegistry: ToolchainRegistry.forTesting,
611623
fileSystem: fs,
612-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
624+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
625+
forceResolvedVersions: true
613626
)
614627

615628
for file in [acpp, ah] {
@@ -649,7 +662,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
649662
workspacePath: packageRoot,
650663
toolchainRegistry: tr,
651664
fileSystem: fs,
652-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
665+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
666+
forceResolvedVersions: true
653667
)
654668

655669
let aswift = packageRoot.appending(components: "Sources", "lib", "a.swift")
@@ -685,7 +699,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
685699
workspacePath: packageRoot,
686700
toolchainRegistry: tr,
687701
fileSystem: fs,
688-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
702+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
703+
forceResolvedVersions: true
689704
)
690705

691706
assertEqual(await swiftpmBuildSystem.projectRoot, try resolveSymlinks(tempDir.appending(component: "pkg")))
@@ -721,7 +736,8 @@ final class SwiftPMBuildSystemTests: XCTestCase {
721736
workspacePath: packageRoot,
722737
toolchainRegistry: tr,
723738
fileSystem: fs,
724-
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup
739+
buildSetup: SourceKitLSPServer.Options.testDefault.buildSetup,
740+
forceResolvedVersions: true
725741
)
726742

727743
let aswift = packageRoot.appending(components: "Plugins", "MyPlugin", "a.swift")

0 commit comments

Comments
 (0)