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