Skip to content

Commit c5da466

Browse files
authored
Improve warning for deprecated collections config (#5746)
- Do not emit the warning for `swift build`, `swift test` etc, since these commands by definition to not work with package collections - Do emit the warning for `swift package-collections` by request an active workspace (cherry picked from commit 7186666)
1 parent 61372ba commit c5da466

File tree

4 files changed

+12
-4
lines changed

4 files changed

+12
-4
lines changed

Sources/Commands/SwiftPackageCollectionsTool.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,7 @@ private extension JSONEncoder {
384384

385385
private extension ParsableCommand {
386386
func with<T>(_ swiftTool: SwiftTool, handler: (_ collections: PackageCollectionsProtocol) throws -> T) throws -> T {
387+
_ = try? swiftTool.getActiveWorkspace(emitDeprecatedConfigurationWarning: true)
387388
let collections = PackageCollections(
388389
configuration: .init(
389390
configurationDirectory: swiftTool.sharedConfigurationDirectory,

Sources/Commands/SwiftTool.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ public class SwiftTool {
539539
}
540540

541541
/// Returns the currently active workspace.
542-
func getActiveWorkspace() throws -> Workspace {
542+
func getActiveWorkspace(emitDeprecatedConfigurationWarning: Bool = false) throws -> Workspace {
543543
if let workspace = _workspace {
544544
return workspace
545545
}
@@ -555,7 +555,8 @@ public class SwiftTool {
555555
localConfigurationDirectory: try self.getLocalConfigurationDirectory(),
556556
sharedConfigurationDirectory: self.sharedConfigurationDirectory,
557557
sharedSecurityDirectory: self.sharedSecurityDirectory,
558-
sharedCacheDirectory: self.sharedCacheDirectory
558+
sharedCacheDirectory: self.sharedCacheDirectory,
559+
emitDeprecatedConfigurationWarning: emitDeprecatedConfigurationWarning
559560
),
560561
authorizationProvider: self.getAuthorizationProvider(),
561562
configuration: .init(

Sources/Workspace/Workspace+Configuration.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ extension Workspace {
5959
/// Path to the shared cache directory
6060
public var sharedCacheDirectory: AbsolutePath?
6161

62+
/// Whether or not to emit a warning about the existence of deprecated configuration files
63+
public var emitDeprecatedConfigurationWarning: Bool
64+
6265
// working directories
6366

6467
/// Path to the repositories clones.
@@ -154,6 +157,7 @@ extension Workspace {
154157
self.sharedConfigurationDirectory = sharedConfigurationDirectory
155158
self.sharedSecurityDirectory = sharedSecurityDirectory
156159
self.sharedCacheDirectory = sharedCacheDirectory
160+
self.emitDeprecatedConfigurationWarning = true
157161
}
158162

159163
/// Create a new workspace location.
@@ -172,7 +176,8 @@ extension Workspace {
172176
localConfigurationDirectory: AbsolutePath,
173177
sharedConfigurationDirectory: AbsolutePath?,
174178
sharedSecurityDirectory: AbsolutePath?,
175-
sharedCacheDirectory: AbsolutePath?
179+
sharedCacheDirectory: AbsolutePath?,
180+
emitDeprecatedConfigurationWarning: Bool = true
176181
) {
177182
self.scratchDirectory = scratchDirectory
178183
self.editsDirectory = editsDirectory
@@ -181,6 +186,7 @@ extension Workspace {
181186
self.sharedConfigurationDirectory = sharedConfigurationDirectory
182187
self.sharedSecurityDirectory = sharedSecurityDirectory
183188
self.sharedCacheDirectory = sharedCacheDirectory
189+
self.emitDeprecatedConfigurationWarning = emitDeprecatedConfigurationWarning
184190
}
185191

186192
/// Create a new workspace location.

Sources/Workspace/Workspace.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3679,7 +3679,7 @@ extension Workspace.Location {
36793679
if let sharedConfigurationDirectory = self.sharedConfigurationDirectory {
36803680
// It may not always be possible to create default location (for example de to restricted sandbox),
36813681
// in which case defaultDirectory would be nil.
3682-
let defaultDirectory = try? fileSystem.getOrCreateSwiftPMConfigurationDirectory(warningHandler: warningHandler)
3682+
let defaultDirectory = try? fileSystem.getOrCreateSwiftPMConfigurationDirectory(warningHandler: self.emitDeprecatedConfigurationWarning ? warningHandler : { _ in })
36833683
if defaultDirectory != nil, sharedConfigurationDirectory != defaultDirectory {
36843684
// custom location _must_ be writable, throw if we cannot access it
36853685
guard fileSystem.isWritable(sharedConfigurationDirectory) else {

0 commit comments

Comments
 (0)