@@ -61,8 +61,11 @@ extension FileSystem {
61
61
try self . createDirectory ( self . dotSwiftPM, recursive: true )
62
62
}
63
63
// Create ~/.swiftpm/cache symlink if necessary
64
- if !self . exists ( self . dotSwiftPMCachesDirectory, followSymlink: false ) {
65
- try self . createSymbolicLink ( dotSwiftPMCachesDirectory, pointingAt: idiomaticCacheDirectory, relative: false )
64
+ // locking ~/.swiftpm to protect from concurrent access
65
+ try self . withLock ( on: self . dotSwiftPM, type: . exclusive) {
66
+ if !self . exists ( self . dotSwiftPMCachesDirectory, followSymlink: false ) {
67
+ try self . createSymbolicLink ( dotSwiftPMCachesDirectory, pointingAt: idiomaticCacheDirectory, relative: false )
68
+ }
66
69
}
67
70
return idiomaticCacheDirectory
68
71
}
@@ -140,8 +143,11 @@ extension FileSystem {
140
143
try self . createDirectory ( self . dotSwiftPM, recursive: true )
141
144
}
142
145
// Create ~/.swiftpm/configuration symlink if necessary
143
- if !self . exists ( self . dotSwiftPMConfigurationDirectory, followSymlink: false ) {
144
- try self . createSymbolicLink ( dotSwiftPMConfigurationDirectory, pointingAt: idiomaticConfigurationDirectory, relative: false )
146
+ // locking ~/.swiftpm to protect from concurrent access
147
+ try self . withLock ( on: self . dotSwiftPM, type: . exclusive) {
148
+ if !self . exists ( self . dotSwiftPMConfigurationDirectory, followSymlink: false ) {
149
+ try self . createSymbolicLink ( dotSwiftPMConfigurationDirectory, pointingAt: idiomaticConfigurationDirectory, relative: false )
150
+ }
145
151
}
146
152
147
153
return idiomaticConfigurationDirectory
@@ -186,8 +192,11 @@ extension FileSystem {
186
192
try self . createDirectory ( self . dotSwiftPM, recursive: true )
187
193
}
188
194
// Create ~/.swiftpm/security symlink if necessary
189
- if !self . exists ( self . dotSwiftPMSecurityDirectory, followSymlink: false ) {
190
- try self . createSymbolicLink ( dotSwiftPMSecurityDirectory, pointingAt: idiomaticSecurityDirectory, relative: false )
195
+ // locking ~/.swiftpm to protect from concurrent access
196
+ try self . withLock ( on: self . dotSwiftPM, type: . exclusive) {
197
+ if !self . exists ( self . dotSwiftPMSecurityDirectory, followSymlink: false ) {
198
+ try self . createSymbolicLink ( dotSwiftPMSecurityDirectory, pointingAt: idiomaticSecurityDirectory, relative: false )
199
+ }
191
200
}
192
201
return idiomaticSecurityDirectory
193
202
}
0 commit comments