@@ -18,16 +18,13 @@ import Workspace
18
18
19
19
protocol ScriptCommand : ParsableCommand {
20
20
var swiftOptions : SwiftToolOptions { get }
21
- var options : ScriptToolOptions { get }
21
+ var file : String { get }
22
22
23
23
func run( _ swiftTool: SwiftTool , as productName: String , at cacheDirPath: AbsolutePath ) throws
24
24
}
25
25
26
26
extension ScriptCommand {
27
27
public func run( ) throws {
28
- guard let file = options. file else {
29
- throw ScriptError . fileNotFound ( " " )
30
- }
31
28
let ( productName, cacheDirPath) = try checkAndPerformCache ( for: file)
32
29
33
30
var swiftOptions = swiftOptions
@@ -51,10 +48,6 @@ struct ScriptToolOptions: ParsableArguments {
51
48
52
49
var shouldBuild : Bool { !shouldSkipBuild }
53
50
54
- /// The script file to run.
55
- @Argument ( help: " The script file to run " )
56
- var file : String ?
57
-
58
51
/// The arguments to pass to the executable.
59
52
@Argument ( parsing: . unconditionalRemaining,
60
53
help: " The arguments to pass to the executable " )
@@ -84,14 +77,16 @@ public struct SwiftScriptTool: ParsableCommand {
84
77
public static var _errorLabel : String { " error " }
85
78
}
86
79
87
- /// swift-run tool namespace
88
80
extension SwiftScriptTool {
89
81
struct Run : ScriptCommand {
90
82
static let configuration = CommandConfiguration (
91
83
abstract: " Runs a script " )
92
84
93
85
@OptionGroup ( _hiddenFromHelp: true )
94
86
var swiftOptions : SwiftToolOptions
87
+
88
+ @Argument ( help: " The script file to run " )
89
+ var file : String
95
90
96
91
@OptionGroup ( )
97
92
var options : ScriptToolOptions
@@ -136,6 +131,9 @@ extension SwiftScriptTool {
136
131
137
132
@OptionGroup ( _hiddenFromHelp: true )
138
133
var swiftOptions : SwiftToolOptions
134
+
135
+ @Argument ( help: " The script file to build " )
136
+ var file : String
139
137
140
138
@OptionGroup ( )
141
139
var options : ScriptToolOptions
@@ -177,8 +175,8 @@ extension SwiftScriptTool {
177
175
@OptionGroup ( _hiddenFromHelp: true )
178
176
var swiftOptions : SwiftToolOptions
179
177
180
- @OptionGroup ( )
181
- var options : ScriptToolOptions
178
+ @Argument ( help : " The script file to clean build cache " )
179
+ var file : String
182
180
183
181
func run( _ swiftTool: SwiftTool , as productName: String , at cacheDirPath: AbsolutePath ) throws {
184
182
try swiftTool. getActiveWorkspace ( ) . clean ( with: swiftTool. diagnostics)
@@ -192,8 +190,8 @@ extension SwiftScriptTool {
192
190
@OptionGroup ( _hiddenFromHelp: true )
193
191
var swiftOptions : SwiftToolOptions
194
192
195
- @OptionGroup ( )
196
- var options : ScriptToolOptions
193
+ @Argument ( help : " The script file to reset build cache " )
194
+ var file : String
197
195
198
196
func run( _ swiftTool: SwiftTool , as productName: String , at cacheDirPath: AbsolutePath ) throws {
199
197
try localFileSystem. removeFileTree ( cacheDirPath)
@@ -207,8 +205,8 @@ extension SwiftScriptTool {
207
205
@OptionGroup ( _hiddenFromHelp: true )
208
206
var swiftOptions : SwiftToolOptions
209
207
210
- @OptionGroup ( )
211
- var options : ScriptToolOptions
208
+ @Argument ( help : " The script file to update dependencies " )
209
+ var file : String
212
210
213
211
@Flag ( name: [ . long, . customShort( " n " ) ] ,
214
212
help: " Display the list of dependencies that can be updated " )
@@ -251,35 +249,6 @@ extension SwiftScriptTool {
251
249
}
252
250
}
253
251
254
- extension SwiftScriptTool {
255
- struct List : ParsableCommand {
256
- static let configuration = CommandConfiguration (
257
- abstract: " List script caches " )
258
-
259
- @OptionGroup ( _hiddenFromHelp: true )
260
- var swiftOptions : SwiftToolOptions
261
-
262
- func run( ) throws {
263
- let cacheDir = try localFileSystem. getOrCreateSwiftScriptCacheDirectory ( )
264
- let scripts = try localFileSystem. getDirectoryContents ( cacheDir)
265
- let resolved = try scripts. map { script -> ( String , AbsolutePath ) in
266
- let sourceDir = cacheDir. appending ( components: script, " Sources " )
267
- guard localFileSystem. isDirectory ( sourceDir) ,
268
- let name = try localFileSystem. getDirectoryContents ( sourceDir) . first,
269
- case let realpath = resolveSymlinks ( sourceDir. appending ( components: name, " main.swift " ) ) else {
270
- throw Diagnostics . fatalError
271
- }
272
- return ( script, realpath)
273
- }
274
- print ( " \( scripts. count) script \( scripts. count > 1 ? " s " : " " ) cached at \( cacheDir) " )
275
- guard let maxLength = resolved. map ( \. 0 . count) . max ( ) else { return }
276
- resolved. forEach { ( name, path) in
277
- print ( name + String( repeating: " " , count: maxLength - name. count + 2 ) + path. pathString)
278
- }
279
- }
280
- }
281
- }
282
-
283
252
extension SwiftScriptTool {
284
253
struct ResolveOptions : ParsableArguments {
285
254
@Option ( help: " The version to resolve at " , transform: { Version ( string: $0) } )
@@ -302,8 +271,8 @@ extension SwiftScriptTool {
302
271
@OptionGroup ( _hiddenFromHelp: true )
303
272
var swiftOptions : SwiftToolOptions
304
273
305
- @OptionGroup ( )
306
- var options : ScriptToolOptions
274
+ @Argument ( help : " The script file to clean " )
275
+ var file : String
307
276
308
277
@OptionGroup ( )
309
278
var resolveOptions : ResolveOptions
@@ -330,6 +299,35 @@ extension SwiftScriptTool {
330
299
}
331
300
}
332
301
302
+ extension SwiftScriptTool {
303
+ struct List : ParsableCommand {
304
+ static let configuration = CommandConfiguration (
305
+ abstract: " List script caches " )
306
+
307
+ @OptionGroup ( _hiddenFromHelp: true )
308
+ var swiftOptions : SwiftToolOptions
309
+
310
+ func run( ) throws {
311
+ let cacheDir = try localFileSystem. getOrCreateSwiftScriptCacheDirectory ( )
312
+ let scripts = try localFileSystem. getDirectoryContents ( cacheDir)
313
+ let resolved = try scripts. map { script -> ( String , AbsolutePath ) in
314
+ let sourceDir = cacheDir. appending ( components: script, " Sources " )
315
+ guard localFileSystem. isDirectory ( sourceDir) ,
316
+ let name = try localFileSystem. getDirectoryContents ( sourceDir) . first,
317
+ case let realpath = resolveSymlinks ( sourceDir. appending ( components: name, " main.swift " ) ) else {
318
+ throw Diagnostics . fatalError
319
+ }
320
+ return ( script, realpath)
321
+ }
322
+ print ( " \( scripts. count) script \( scripts. count > 1 ? " s " : " " ) cached at \( cacheDir) " )
323
+ guard let maxLength = resolved. map ( \. 0 . count) . max ( ) else { return }
324
+ resolved. forEach { ( name, path) in
325
+ print ( name + String( repeating: " " , count: maxLength - name. count + 2 ) + path. pathString)
326
+ }
327
+ }
328
+ }
329
+ }
330
+
333
331
/// Executes the executable at the specified path.
334
332
fileprivate func run(
335
333
_ executablePath: AbsolutePath ,
0 commit comments