@@ -30,57 +30,60 @@ import func POSIX.chdir
30
30
extension PackageToolOptions : XcodeprojOptions { }
31
31
32
32
private enum Mode : Argument , Equatable , CustomStringConvertible {
33
- case Init( InitMode )
34
33
case doctor
35
- case showDependencies ( ShowDependenciesMode )
34
+ case dumpPackage
36
35
case fetch
36
+ case generateXcodeproj
37
+ case initPackage
38
+ case showDependencies
37
39
case update
38
40
case usage
39
41
case version
40
- case generateXcodeproj( String ? )
41
- case dumpPackage( String ? )
42
42
43
43
init ? ( argument: String , pop: ( ) -> String ? ) throws {
44
44
switch argument {
45
- case " init " , " initialize " :
46
- self = try . Init( InitMode ( pop ( ) ) )
47
45
case " doctor " :
48
46
self = . doctor
49
- case " show-dependencies " , " -D " :
50
- self = try . showDependencies ( ShowDependenciesMode ( pop ( ) ) )
47
+ case " dump-package " :
48
+ self = . dumpPackage
51
49
case " fetch " :
52
50
self = . fetch
51
+ case " generate-xcodeproj " :
52
+ self = . generateXcodeproj
53
+ case " init " :
54
+ self = . initPackage
55
+ case " show-dependencies " :
56
+ self = . showDependencies
53
57
case " update " :
54
58
self = . update
55
- case " help " , " usage " , " --help " , " -h " :
59
+ case " --help " , " -h " :
56
60
self = . usage
57
- case " version " :
61
+ case " -- version" :
58
62
self = . version
59
- case " generate-xcodeproj " :
60
- self = . generateXcodeproj( pop ( ) )
61
- case " dump-package " :
62
- self = . dumpPackage( pop ( ) )
63
63
default :
64
64
return nil
65
65
}
66
66
}
67
67
68
68
var description : String {
69
69
switch self {
70
- case . Init( let type) : return " init= \( type) "
71
70
case . doctor: return " doctor "
72
- case . showDependencies: return " show-dependencies "
73
- case . generateXcodeproj: return " generate-xcodeproj "
71
+ case . dumpPackage: return " dump-package "
74
72
case . fetch: return " fetch "
73
+ case . generateXcodeproj: return " generate-xcodeproj "
74
+ case . initPackage: return " initPackage "
75
+ case . showDependencies: return " show-dependencies "
75
76
case . update: return " update "
76
- case . usage: return " help "
77
- case . version: return " version "
78
- case . dumpPackage: return " dump-package "
77
+ case . usage: return " --help "
78
+ case . version: return " --version "
79
79
}
80
80
}
81
81
}
82
82
83
83
private enum PackageToolFlag : Argument {
84
+ case initMode( String )
85
+ case showDepsMode( String )
86
+ case outputPath( String )
84
87
case chdir( String )
85
88
case colorMode( ColorWrap . Mode )
86
89
case xcc( String )
@@ -100,10 +103,14 @@ private enum PackageToolFlag: Argument {
100
103
switch argument {
101
104
case Flag . chdir, Flag . C:
102
105
self = try . chdir( forcePop ( ) )
106
+ case " --type " :
107
+ self = try . initMode( forcePop ( ) )
108
+ case " --format " :
109
+ self = try . showDepsMode( forcePop ( ) )
110
+ case " --output " :
111
+ self = try . outputPath( forcePop ( ) )
103
112
case " --verbose " , " -v " :
104
113
self = . verbose( 1 )
105
- case " -vv " :
106
- self = . verbose( 2 )
107
114
case " --color " :
108
115
let rawValue = try forcePop ( )
109
116
guard let mode = ColorWrap . Mode ( rawValue) else {
@@ -119,6 +126,9 @@ private enum PackageToolFlag: Argument {
119
126
}
120
127
121
128
private class PackageToolOptions : Options {
129
+ var initMode : InitMode = InitMode . library
130
+ var showDepsMode : ShowDependenciesMode = ShowDependenciesMode . text
131
+ var outputPath : String ? = nil
122
132
var verbosity : Int = 0
123
133
var colorMode : ColorWrap . Mode = . Auto
124
134
var Xcc : [ String ] = [ ]
@@ -164,8 +174,8 @@ public struct SwiftPackageTool {
164
174
}
165
175
166
176
switch mode {
167
- case . Init ( let initMode ) :
168
- let initPackage = try InitPackage ( mode: initMode)
177
+ case . initPackage :
178
+ let initPackage = try InitPackage ( mode: opts . initMode)
169
179
try initPackage. writePackageStructure ( )
170
180
171
181
case . update:
@@ -197,9 +207,9 @@ public struct SwiftPackageTool {
197
207
case . doctor:
198
208
doctor ( )
199
209
200
- case . showDependencies( let mode ) :
210
+ case . showDependencies:
201
211
let ( rootPackage, _) = try fetch ( opts. path. root)
202
- dumpDependenciesOf ( rootPackage: rootPackage, mode: mode )
212
+ dumpDependenciesOf ( rootPackage: rootPackage, mode: opts . showDepsMode )
203
213
204
214
case . version:
205
215
#if HasCustomVersionString
@@ -208,7 +218,7 @@ public struct SwiftPackageTool {
208
218
print ( " Swift Package Manager – Swift 3.0 " )
209
219
#endif
210
220
211
- case . generateXcodeproj( let outpath ) :
221
+ case . generateXcodeproj:
212
222
let ( rootPackage, externalPackages) = try fetch ( opts. path. root)
213
223
let ( modules, externalModules, products) = try transmute ( rootPackage, externalPackages: externalPackages)
214
224
@@ -219,7 +229,7 @@ public struct SwiftPackageTool {
219
229
let dstdir : String
220
230
let packageName = rootPackage. name
221
231
222
- switch outpath {
232
+ switch opts . outputPath {
223
233
case let outpath? where outpath. hasSuffix ( " .xcodeproj " ) :
224
234
// if user specified path ending with .xcodeproj, use that
225
235
projectName = String ( outpath. basename. characters. dropLast ( 10 ) )
@@ -235,9 +245,8 @@ public struct SwiftPackageTool {
235
245
236
246
print ( " generated: " , outpath. prettyPath)
237
247
238
- case . dumpPackage( let packagePath) :
239
-
240
- let root = packagePath ?? opts. path. root
248
+ case . dumpPackage:
249
+ let root = opts. outputPath ?? opts. path. root
241
250
let manifest = try parseManifest ( path: root, baseURL: root)
242
251
let package = manifest. package
243
252
let json = try jsonString ( package : package )
@@ -256,21 +265,21 @@ public struct SwiftPackageTool {
256
265
print ( " USAGE: swift package [command] [options] " )
257
266
print ( " " )
258
267
print ( " COMMANDS: " )
259
- print ( " init[= <type>] Initialize a new package (executable| library) " )
260
- print ( " fetch Fetch package dependencies " )
261
- print ( " update Update package dependencies " )
262
- print ( " generate-xcodeproj[= <path>] Generates an Xcode project " )
263
- print ( " show-dependencies[= <format>] Print dependency graph (text|dot|json) " )
264
- print ( " dump-package[= <path>] Print Package.swift as JSON " )
268
+ print ( " init [--type <type>] Initialize package (library|executable ) " )
269
+ print ( " fetch Fetch package dependencies " )
270
+ print ( " update Update package dependencies " )
271
+ print ( " generate-xcodeproj [--output <path>] Generates an Xcode project " )
272
+ print ( " show-dependencies [--format <format>] Print dependency graph (text|dot|json) " )
273
+ print ( " dump-package [--output <path>] Print Package.swift as JSON " )
265
274
print ( " " )
266
275
print ( " OPTIONS: " )
267
- print ( " -- chdir <path> Change working directory before any command [-C] " )
268
- print ( " --color <mode> Specify color mode (auto|always|never) " )
269
- print ( " -- verbose Increase verbosity of informational output [-v] " )
270
- print ( " -Xcc <flag> Pass flag through to all C compiler instantiations " )
271
- print ( " -Xlinker <flag> Pass flag through to all linker instantiations " )
272
- print ( " -Xswiftc <flag> Pass flag through to all Swift compiler instantiations " )
273
- print ( " " )
276
+ print ( " -C, -- chdir <path> Change working directory before any other operation " )
277
+ print ( " --color <mode> Specify color mode (auto|always|never) " )
278
+ print ( " -v, -- verbose Increase verbosity of informational output " )
279
+ print ( " --version Print the Swift Package Manager version " )
280
+ print ( " -Xcc <flag> Pass flag through to all C compiler invocations " )
281
+ print ( " -Xlinker <flag> Pass flag through to all linker invocations " )
282
+ print ( " -Xswiftc <flag> Pass flag through to all Swift compiler invocations " )
274
283
print ( " " )
275
284
print ( " NOTE: Use `swift build` to build packages, and `swift test` to test packages " )
276
285
}
@@ -281,6 +290,12 @@ public struct SwiftPackageTool {
281
290
let opts = PackageToolOptions ( )
282
291
for flag in flags {
283
292
switch flag {
293
+ case . initMode( let value) :
294
+ opts. initMode = try InitMode ( value)
295
+ case . showDepsMode( let value) :
296
+ opts. showDepsMode = try ShowDependenciesMode ( value)
297
+ case . outputPath( let path) :
298
+ opts. outputPath = path
284
299
case . chdir( let path) :
285
300
opts. chdir = path
286
301
case . xcc( let value) :
0 commit comments