@@ -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:
@@ -181,9 +191,9 @@ public struct SwiftPackageTool {
181
191
case . doctor:
182
192
doctor ( )
183
193
184
- case . showDependencies( let mode ) :
194
+ case . showDependencies:
185
195
let ( rootPackage, _) = try fetch ( opts. path. root)
186
- dumpDependenciesOf ( rootPackage: rootPackage, mode: mode )
196
+ dumpDependenciesOf ( rootPackage: rootPackage, mode: opts . showDepsMode )
187
197
188
198
case . version:
189
199
#if HasCustomVersionString
@@ -192,7 +202,7 @@ public struct SwiftPackageTool {
192
202
print ( " Swift Package Manager – Swift 3.0 " )
193
203
#endif
194
204
195
- case . generateXcodeproj( let outpath ) :
205
+ case . generateXcodeproj:
196
206
let ( rootPackage, externalPackages) = try fetch ( opts. path. root)
197
207
let ( modules, externalModules, products) = try transmute ( rootPackage, externalPackages: externalPackages)
198
208
@@ -203,7 +213,7 @@ public struct SwiftPackageTool {
203
213
let dstdir : String
204
214
let packageName = rootPackage. name
205
215
206
- switch outpath {
216
+ switch opts . outputPath {
207
217
case let outpath? where outpath. hasSuffix ( " .xcodeproj " ) :
208
218
// if user specified path ending with .xcodeproj, use that
209
219
projectName = String ( outpath. basename. characters. dropLast ( 10 ) )
@@ -219,9 +229,8 @@ public struct SwiftPackageTool {
219
229
220
230
print ( " generated: " , outpath. prettyPath)
221
231
222
- case . dumpPackage( let packagePath) :
223
-
224
- let root = packagePath ?? opts. path. root
232
+ case . dumpPackage:
233
+ let root = opts. outputPath ?? opts. path. root
225
234
let manifest = try parseManifest ( path: root, baseURL: root)
226
235
let package = manifest. package
227
236
let json = try jsonString ( package : package )
@@ -240,21 +249,21 @@ public struct SwiftPackageTool {
240
249
print ( " USAGE: swift package [command] [options] " )
241
250
print ( " " )
242
251
print ( " COMMANDS: " )
243
- print ( " init[= <type>] Initialize a new package (executable| library) " )
244
- print ( " fetch Fetch package dependencies " )
245
- print ( " update Update package dependencies " )
246
- print ( " generate-xcodeproj[= <path>] Generates an Xcode project " )
247
- print ( " show-dependencies[= <format>] Print dependency graph (text|dot|json) " )
248
- print ( " dump-package[= <path>] Print Package.swift as JSON " )
252
+ print ( " init [--type <type>] Initialize package (library|executable ) " )
253
+ print ( " fetch Fetch package dependencies " )
254
+ print ( " update Update package dependencies " )
255
+ print ( " generate-xcodeproj [--output <path>] Generates an Xcode project " )
256
+ print ( " show-dependencies [--format <format>] Print dependency graph (text|dot|json) " )
257
+ print ( " dump-package [--output <path>] Print Package.swift as JSON " )
249
258
print ( " " )
250
259
print ( " OPTIONS: " )
251
- print ( " -- chdir <path> Change working directory before any command [-C] " )
252
- print ( " --color <mode> Specify color mode (auto|always|never) " )
253
- print ( " -- verbose Increase verbosity of informational output [-v] " )
254
- print ( " -Xcc <flag> Pass flag through to all C compiler instantiations " )
255
- print ( " -Xlinker <flag> Pass flag through to all linker instantiations " )
256
- print ( " -Xswiftc <flag> Pass flag through to all Swift compiler instantiations " )
257
- print ( " " )
260
+ print ( " -C, -- chdir <path> Change working directory before any other operation " )
261
+ print ( " --color <mode> Specify color mode (auto|always|never) " )
262
+ print ( " -v, -- verbose Increase verbosity of informational output " )
263
+ print ( " --version Print the Swift Package Manager version " )
264
+ print ( " -Xcc <flag> Pass flag through to all C compiler invocations " )
265
+ print ( " -Xlinker <flag> Pass flag through to all linker invocations " )
266
+ print ( " -Xswiftc <flag> Pass flag through to all Swift compiler invocations " )
258
267
print ( " " )
259
268
print ( " NOTE: Use `swift build` to build packages, and `swift test` to test packages " )
260
269
}
@@ -265,6 +274,12 @@ public struct SwiftPackageTool {
265
274
let opts = PackageToolOptions ( )
266
275
for flag in flags {
267
276
switch flag {
277
+ case . initMode( let value) :
278
+ opts. initMode = try InitMode ( value)
279
+ case . showDepsMode( let value) :
280
+ opts. showDepsMode = try ShowDependenciesMode ( value)
281
+ case . outputPath( let path) :
282
+ opts. outputPath = path
268
283
case . chdir( let path) :
269
284
opts. chdir = path
270
285
case . xcc( let value) :
0 commit comments