fce44ae9 Andy McCall 1 month ago ↶
1
2
b582948f Andy McCall 19 days ago ↶
3
mod approve ;
642da263 Andy McCall 7 days ago ↶
4
mod artifact ;
ff1f62fe Andy McCall 1 month ago ↶
5
mod auth ;
fce44ae9 Andy McCall 1 month ago ↶
6
mod format ;
75167672 Andy McCall 1 month ago
7
mod identity ;
c6aa5bd9 Andy McCall 1 month ago ↶
8
mod json ;
d82e4409 Andy McCall 1 month ago ↶
9
mod proposal ;
fc1a466a Andy McCall 1 month ago ↶
10
mod receipt ;
fce44ae9 Andy McCall 1 month ago ↶
11
mod sync ;
e59512f2 Andy McCall 18 days ago ↶
12
mod tlog ;
135212de Andy McCall 1 month ago ↶
13
pub mod ui ;
fce44ae9 Andy McCall 1 month ago ↶
14
mod workspace ;
15
16
use anyhow:: { Context, Result } ;
17
use clap:: { Parser, Subcommand} ;
18
use oxy_core:: repo:: Repo;
19
use std:: path:: PathBuf;
20
21
# [ derive ( Parser ) ]
75167672 Andy McCall 1 month ago
22
# [ command (
23
name = " oxy" ,
e293c90d Andy McCall 1 month ago ↶
24
version = env!(" OXY_VERSION_LONG" ) ,
75167672 Andy McCall 1 month ago
25
about = " Oxygen: breathing fresh air into version control"
26
)]
fce44ae9 Andy McCall 1 month ago ↶
27
struct Cli {
135212de Andy McCall 1 month ago ↶
28
29
#[arg(long, global = true)]
30
plain : bool ,
98a1620a Andy McCall 1 month ago ↶
31
32
#[arg(long, global = true, value_name = "OP")]
33
at_op : Option< String> ,
fce44ae9 Andy McCall 1 month ago ↶
34
#[command(subcommand)]
35
cmd : Cmd,
36
}
37
98a1620a Andy McCall 1 month ago ↶
38
39
static AT_OP : std:: sync:: OnceLock< Option< String> > = std:: sync:: OnceLock:: new( ) ;
40
fce44ae9 Andy McCall 1 month ago ↶
41
# [ derive ( Subcommand ) ]
42
enum Cmd {
43
e02bf0cd Andy McCall 1 month ago ↶
44
Init {
d42369ab Andy McCall 1 month ago
45
e02bf0cd Andy McCall 1 month ago ↶
46
path: Option< PathBuf> ,
47
48
# [ arg ( long ) ]
49
bare: bool ,
d069701a Andy McCall 1 month ago ↶
50
51
52
53
# [ arg ( long, value_name = " URL" ) ]
54
store: Option< String> ,
e02bf0cd Andy McCall 1 month ago ↶
55
} ,
fce44ae9 Andy McCall 1 month ago ↶
56
b3c5a59a Andy McCall 1 month ago ↶
57
Clone {
d42369ab Andy McCall 1 month ago
58
b3c5a59a Andy McCall 1 month ago ↶
59
url: String ,
d42369ab Andy McCall 1 month ago
60
b3c5a59a Andy McCall 1 month ago ↶
61
dest: Option< PathBuf> ,
62
63
# [ arg ( long ) ]
64
max_blob: Option< String> ,
7421309f Andy McCall 1 month ago ↶
65
66
# [ arg ( long = " sparse" ) ]
67
sparse: Vec< String> ,
2863456a Andy McCall 1 month ago ↶
68
69
# [ arg ( long ) ]
70
depth: Option< u32 > ,
14edbaaf Andy McCall 1 month ago ↶
71
72
# [ arg ( long ) ]
73
recursive: bool ,
b3c5a59a Andy McCall 1 month ago ↶
74
} ,
2863456a Andy McCall 1 month ago ↶
75
76
Deepen {
d42369ab Andy McCall 1 month ago
77
2863456a Andy McCall 1 month ago ↶
78
# [ arg ( default_value_t = 10 ) ]
79
depth: u32 ,
d42369ab Andy McCall 1 month ago
80
2863456a Andy McCall 1 month ago ↶
81
# [ arg ( long, default_value = " origin" ) ]
82
remote: String ,
83
} ,
7421309f Andy McCall 1 month ago ↶
84
d42369ab Andy McCall 1 month ago
85
Sparse {
86
87
paths: Vec< String> ,
88
} ,
fce44ae9 Andy McCall 1 month ago ↶
89
50a046e4 Andy McCall 1 month ago ↶
90
Status {
91
92
# [ arg ( long ) ]
93
json: bool ,
94
} ,
135212de Andy McCall 1 month ago ↶
95
96
Prompt {
694805cc Andy McCall 1 month ago ↶
97
135212de Andy McCall 1 month ago ↶
98
# [ arg ( long, default_value = oxy_core::repo::DEFAULT_PROMPT_FORMAT ) ]
99
format: String ,
694805cc Andy McCall 1 month ago ↶
100
101
# [ arg ( long ) ]
102
glyphs: bool ,
103
104
# [ arg ( long, value_parser = [" raw" , " bash" , " zsh" ] ) ]
105
color: Option< String> ,
135212de Andy McCall 1 month ago ↶
106
} ,
fce44ae9 Andy McCall 1 month ago ↶
107
108
Commit {
d42369ab Andy McCall 1 month ago
109
6a81dbab Andy McCall 1 month ago ↶
110
# [ arg ( short, long, required_unless_present = " file" , conflicts_with = " file" ) ]
111
message: Option< String> ,
112
113
# [ arg ( short = 'F', long, value_name = " FILE" ) ]
114
file: Option< PathBuf> ,
fce44ae9 Andy McCall 1 month ago ↶
115
116
# [ arg ( long = " depends-on" ) ]
117
depends_on: Vec< String> ,
957fee30 Andy McCall 1 month ago ↶
118
119
paths: Vec< String> ,
120
121
# [ arg ( short, long ) ]
122
interactive: bool ,
c6aa5bd9 Andy McCall 1 month ago ↶
123
124
# [ arg ( long, value_delimiter = ', ' ) ]
125
hunks: Vec< usize > ,
fce44ae9 Andy McCall 1 month ago ↶
126
} ,
728da0f9 Andy McCall 1 month ago ↶
127
128
Squash {
d42369ab Andy McCall 1 month ago
129
728da0f9 Andy McCall 1 month ago ↶
130
change: String ,
d42369ab Andy McCall 1 month ago
131
728da0f9 Andy McCall 1 month ago ↶
132
# [ arg ( long ) ]
133
into: String ,
134
} ,
135
136
Rebase {
d42369ab Andy McCall 1 month ago
137
728da0f9 Andy McCall 1 month ago ↶
138
change: String ,
139
140
# [ arg ( long, required = true, num_args = 1.. ) ]
141
onto: Vec< String> ,
e266b7d4 Andy McCall 1 month ago ↶
142
143
144
145
# [ arg ( long ) ]
146
into_working_copy: bool ,
728da0f9 Andy McCall 1 month ago ↶
147
} ,
957fee30 Andy McCall 1 month ago ↶
148
149
Blame {
d42369ab Andy McCall 1 month ago
150
957fee30 Andy McCall 1 month ago ↶
151
path: String ,
d42369ab Andy McCall 1 month ago
152
957fee30 Andy McCall 1 month ago ↶
153
# [ arg ( long ) ]
154
json: bool ,
155
} ,
156
157
Bisect {
158
# [ command ( subcommand ) ]
159
cmd: BisectCmd,
160
} ,
fce44ae9 Andy McCall 1 month ago ↶
161
94084087 Andy McCall 1 month ago ↶
162
Log {
bf3a6781 Andy McCall 1 month ago ↶
163
164
165
166
47ce8b8e Andy McCall 1 month ago ↶
167
# [ arg ( short = 'r', long, value_name = " REVSET" , conflicts_with_all = [" path" , " lines" ] ) ]
168
revset: Option< String> ,
94084087 Andy McCall 1 month ago ↶
169
170
# [ arg ( short = 'n', long ) ]
171
limit: Option< usize > ,
172
173
# [ arg ( short, long ) ]
174
verbose: bool ,
c6aa5bd9 Andy McCall 1 month ago ↶
175
176
# [ arg ( long ) ]
177
path: Option< String> ,
83d61e80 Andy McCall 1 month ago ↶
178
179
180
181
# [ arg ( short = 'L', value_name = " START,END:PATH" , conflicts_with = " path" ) ]
182
lines: Option< String> ,
d42369ab Andy McCall 1 month ago
183
c6aa5bd9 Andy McCall 1 month ago ↶
184
# [ arg ( long ) ]
185
json: bool ,
94084087 Andy McCall 1 month ago ↶
186
} ,
fce44ae9 Andy McCall 1 month ago ↶
187
c6aa5bd9 Andy McCall 1 month ago ↶
188
Diff {
189
190
change: Option< String> ,
d42369ab Andy McCall 1 month ago
191
c6aa5bd9 Andy McCall 1 month ago ↶
192
# [ arg ( long ) ]
193
json: bool ,
194
} ,
195
196
Cat {
d42369ab Andy McCall 1 month ago
197
c6aa5bd9 Andy McCall 1 month ago ↶
198
path: String ,
b0a0c9af Andy McCall 1 month ago ↶
199
200
201
c6aa5bd9 Andy McCall 1 month ago ↶
202
# [ arg ( short = 'r', long ) ]
203
change: Option< String> ,
204
} ,
205
206
Root {
d42369ab Andy McCall 1 month ago
207
c6aa5bd9 Andy McCall 1 month ago ↶
208
# [ arg ( long ) ]
209
json: bool ,
210
} ,
211
212
Version {
d42369ab Andy McCall 1 month ago
213
c6aa5bd9 Andy McCall 1 month ago ↶
214
# [ arg ( long ) ]
215
json: bool ,
216
} ,
217
218
Discard {
d42369ab Andy McCall 1 month ago
219
c6aa5bd9 Andy McCall 1 month ago ↶
220
paths: Vec< String> ,
221
222
# [ arg ( long, value_delimiter = ', ' ) ]
223
hunks: Vec< usize > ,
224
} ,
225
226
Hunks {
d42369ab Andy McCall 1 month ago
227
c6aa5bd9 Andy McCall 1 month ago ↶
228
# [ arg ( long ) ]
229
json: bool ,
230
} ,
6a81dbab Andy McCall 1 month ago ↶
231
232
233
614541c3 Andy McCall 1 month ago ↶
234
Describe {
d42369ab Andy McCall 1 month ago
235
614541c3 Andy McCall 1 month ago ↶
236
# [ arg ( short, long ) ]
6a81dbab Andy McCall 1 month ago ↶
237
message: Option< String> ,
d42369ab Andy McCall 1 month ago
238
614541c3 Andy McCall 1 month ago ↶
239
change: Option< String> ,
6a81dbab Andy McCall 1 month ago ↶
240
241
# [ arg ( long, conflicts_with = " message" ) ]
242
json: bool ,
614541c3 Andy McCall 1 month ago ↶
243
} ,
23b217d7 Andy McCall 1 month ago ↶
244
614541c3 Andy McCall 1 month ago ↶
245
Amend {
d42369ab Andy McCall 1 month ago
246
614541c3 Andy McCall 1 month ago ↶
247
# [ arg ( short, long ) ]
248
message: Option< String> ,
23b217d7 Andy McCall 1 month ago ↶
249
69953b50 Andy McCall 17 days ago ↶
250
# [ arg ( long, conflicts_with = " paths" ) ]
23b217d7 Andy McCall 1 month ago ↶
251
into: Option< String> ,
69953b50 Andy McCall 17 days ago ↶
252
253
paths: Vec< String> ,
614541c3 Andy McCall 1 month ago ↶
254
} ,
23b217d7 Andy McCall 1 month ago ↶
255
d42369ab Andy McCall 1 month ago
256
Split {
257
258
change: String ,
259
260
paths: Vec< String> ,
261
} ,
2c9ddac3 Andy McCall 1 month ago ↶
262
d42369ab Andy McCall 1 month ago
263
Abandon {
2c9ddac3 Andy McCall 1 month ago ↶
264
265
# [ arg ( required_unless_present = " revset" ) ]
266
change: Option< String> ,
267
268
# [ arg ( short = 'r', long, value_name = " REVSET" , conflicts_with = " change" ) ]
269
revset: Option< String> ,
270
271
# [ arg ( long, short = 'y' ) ]
272
yes: bool ,
d42369ab Andy McCall 1 month ago
273
} ,
2c9ddac3 Andy McCall 1 month ago ↶
274
c6aa5bd9 Andy McCall 1 month ago ↶
275
Show {
d42369ab Andy McCall 1 month ago
276
2c9ddac3 Andy McCall 1 month ago ↶
277
# [ arg ( required_unless_present = " revset" ) ]
278
change: Option< String> ,
279
280
# [ arg ( short = 'r', long, value_name = " REVSET" , conflicts_with = " change" ) ]
281
revset: Option< String> ,
0299076f Andy McCall 17 days ago ↶
282
283
# [ arg ( long ) ]
284
stat: bool ,
d42369ab Andy McCall 1 month ago
285
c6aa5bd9 Andy McCall 1 month ago ↶
286
# [ arg ( long ) ]
287
json: bool ,
288
} ,
fce44ae9 Andy McCall 1 month ago ↶
289
290
Checkout {
d42369ab Andy McCall 1 month ago
291
fce44ae9 Andy McCall 1 month ago ↶
292
changes: Vec< String> ,
293
294
# [ arg ( long ) ]
295
discard: bool ,
1c2bd9ab Andy McCall 1 month ago ↶
296
297
298
# [ arg ( long, conflicts_with = " discard" ) ]
299
carry: bool ,
fce44ae9 Andy McCall 1 month ago ↶
300
} ,
157d02e9 Andy McCall 10 days ago ↶
301
302
303
c6aa5bd9 Andy McCall 1 month ago ↶
304
Resolve {
9bd98cfb Andy McCall 9 days ago ↶
305
306
157d02e9 Andy McCall 10 days ago ↶
307
paths: Vec< String> ,
9bd98cfb Andy McCall 9 days ago ↶
308
309
310
# [ arg ( long ) ]
311
both: bool ,
312
313
# [ arg ( long, requires = " both" ) ]
314
reverse: bool ,
d42369ab Andy McCall 1 month ago
315
c6aa5bd9 Andy McCall 1 month ago ↶
316
# [ arg ( long ) ]
317
json: bool ,
318
} ,
fce44ae9 Andy McCall 1 month ago ↶
319
320
Undo,
252e8cb2 Andy McCall 1 month ago ↶
321
322
Checkpoint,
d42369ab Andy McCall 1 month ago
323
324
Completions {
325
326
shell: clap_complete:: Shell,
327
} ,
328
329
Man {
330
331
# [ arg ( long ) ]
332
dir: Option< PathBuf> ,
333
} ,
3e5772cc Andy McCall 1 month ago ↶
334
335
Doctor {
336
337
# [ arg ( long ) ]
338
offline: bool ,
d42369ab Andy McCall 1 month ago
339
3e5772cc Andy McCall 1 month ago ↶
340
# [ arg ( long ) ]
341
json: bool ,
342
} ,
387335ff Andy McCall 1 month ago ↶
343
344
Fsck {
d42369ab Andy McCall 1 month ago
345
387335ff Andy McCall 1 month ago ↶
346
# [ arg ( long ) ]
347
json: bool ,
348
} ,
da652d63 Andy McCall 1 month ago ↶
349
ba160f60 Andy McCall 1 month ago ↶
350
Gc {
351
352
# [ arg ( long ) ]
353
now: bool ,
b689779e Andy McCall 24 days ago ↶
354
355
# [ arg ( long ) ]
356
expire_snapshots: bool ,
d8d93678 Andy McCall 1 month ago ↶
357
358
# [ arg ( long, value_name = " NAME" ) ]
359
remote: Option< String> ,
ba160f60 Andy McCall 1 month ago ↶
360
} ,
fce44ae9 Andy McCall 1 month ago ↶
361
362
# [ command ( name = " op" ) ]
363
Op {
364
# [ command ( subcommand ) ]
365
cmd: OpCmd,
366
} ,
cdb5beba Andy McCall 1 month ago ↶
367
d42369ab Andy McCall 1 month ago
368
Lock {
369
370
path: String ,
371
} ,
cdb5beba Andy McCall 1 month ago ↶
372
d42369ab Andy McCall 1 month ago
373
Unlock {
374
375
path: String ,
376
} ,
4e88e774 Andy McCall 1 month ago ↶
377
378
Workspace {
379
# [ command ( subcommand ) ]
380
cmd: WorkspaceCmd,
381
} ,
7b9809e6 Andy McCall 1 month ago ↶
382
383
Bookmark {
384
# [ command ( subcommand ) ]
385
cmd: BookmarkCmd,
386
} ,
733ea16a Andy McCall 17 days ago ↶
387
388
d42369ab Andy McCall 1 month ago
389
Merge {
390
391
bookmark: String ,
392
} ,
ff1f62fe Andy McCall 1 month ago ↶
393
394
Auth {
395
# [ command ( subcommand ) ]
396
cmd: AuthCmd,
397
} ,
4dee277c Andy McCall 1 month ago ↶
398
399
Submodule {
400
# [ command ( subcommand ) ]
401
cmd: SubmoduleCmd,
402
} ,
51d4862a Andy McCall 18 days ago ↶
403
404
405
Witness {
406
# [ command ( subcommand ) ]
407
cmd: WitnessCmd,
408
} ,
e59512f2 Andy McCall 18 days ago ↶
409
410
411
Tlog {
412
# [ command ( subcommand ) ]
413
cmd: TlogCmd,
414
} ,
642da263 Andy McCall 7 days ago ↶
415
416
Artifact {
417
# [ command ( subcommand ) ]
418
cmd: ArtifactCmd,
419
} ,
fc1a466a Andy McCall 1 month ago ↶
420
421
Receipt {
422
# [ command ( subcommand ) ]
423
cmd: ReceiptCmd,
424
} ,
132b884b Andy McCall 1 month ago ↶
425
426
Tag {
427
# [ command ( subcommand ) ]
428
cmd: TagCmd,
429
} ,
fce44ae9 Andy McCall 1 month ago ↶
430
431
Remote {
432
# [ command ( subcommand ) ]
433
cmd: RemoteCmd,
434
} ,
435
c6aa5bd9 Andy McCall 1 month ago ↶
436
Fetch {
d42369ab Andy McCall 1 month ago
437
c6aa5bd9 Andy McCall 1 month ago ↶
438
remote: Option< String> ,
d42369ab Andy McCall 1 month ago
439
c6aa5bd9 Andy McCall 1 month ago ↶
440
# [ arg ( long ) ]
441
json: bool ,
442
} ,
fce44ae9 Andy McCall 1 month ago ↶
443
c6aa5bd9 Andy McCall 1 month ago ↶
444
Pull {
d42369ab Andy McCall 1 month ago
445
c6aa5bd9 Andy McCall 1 month ago ↶
446
remote: Option< String> ,
d42369ab Andy McCall 1 month ago
447
c6aa5bd9 Andy McCall 1 month ago ↶
448
# [ arg ( long ) ]
449
json: bool ,
450
} ,
fce44ae9 Andy McCall 1 month ago ↶
451
452
Push {
d42369ab Andy McCall 1 month ago
453
fce44ae9 Andy McCall 1 month ago ↶
454
remote: Option< String> ,
455
456
# [ arg ( long ) ]
457
force: bool ,
7b9809e6 Andy McCall 1 month ago ↶
458
459
# [ arg ( short = 'b', long ) ]
460
bookmark: Option< String> ,
f8c69576 Andy McCall 1 month ago ↶
461
b63fc7a7 Andy McCall 11 days ago ↶
462
463
f8c69576 Andy McCall 1 month ago ↶
464
# [ arg ( long, value_name = " NAME" , conflicts_with_all = [" bookmark" , " force" ] ) ]
465
delete: Option< String> ,
d42369ab Andy McCall 1 month ago
466
c6aa5bd9 Andy McCall 1 month ago ↶
467
# [ arg ( long ) ]
468
json: bool ,
fce44ae9 Andy McCall 1 month ago ↶
469
} ,
2b5ee371 Andy McCall 1 month ago ↶
470
fce44ae9 Andy McCall 1 month ago ↶
471
Serve {
472
473
# [ arg ( long, default_value = " ." ) ]
474
root: PathBuf,
d42369ab Andy McCall 1 month ago
475
fce44ae9 Andy McCall 1 month ago ↶
476
# [ arg ( long, default_value = " 127.0.0.1:8890" ) ]
477
bind: String ,
478
479
# [ arg ( long = " token" ) ]
480
tokens: Vec< String> ,
2b5ee371 Andy McCall 1 month ago ↶
481
482
# [ arg ( long, requires = " tls_key" ) ]
483
tls_cert: Option< PathBuf> ,
484
485
# [ arg ( long, requires = " tls_cert" ) ]
486
tls_key: Option< PathBuf> ,
fce44ae9 Andy McCall 1 month ago ↶
487
} ,
488
489
Identity {
490
# [ command ( subcommand ) ]
491
cmd: IdentityCmd,
492
} ,
05e71ed6 Andy McCall 1 month ago ↶
493
494
Seal {
d42369ab Andy McCall 1 month ago
495
05e71ed6 Andy McCall 1 month ago ↶
496
changes: Vec< String> ,
d82e4409 Andy McCall 1 month ago ↶
497
498
# [ arg ( long, conflicts_with = " changes" ) ]
499
proposal: Option< String> ,
b582948f Andy McCall 19 days ago ↶
500
501
# [ arg ( long, conflicts_with_all = [" changes" , " proposal" ], requires = " job" ) ]
502
flow: Option< String> ,
503
504
# [ arg ( long, requires = " flow" ) ]
505
job: Option< String> ,
506
507
# [ arg ( long, requires = " flow" ) ]
508
reject: bool ,
d42369ab Andy McCall 1 month ago
509
05e71ed6 Andy McCall 1 month ago ↶
510
# [ arg ( long ) ]
511
json: bool ,
512
} ,
d82e4409 Andy McCall 1 month ago ↶
513
514
Proposal {
515
# [ command ( subcommand ) ]
516
cmd: ProposalCmd,
517
} ,
fce44ae9 Andy McCall 1 month ago ↶
518
c6aa5bd9 Andy McCall 1 month ago ↶
519
Verify {
d42369ab Andy McCall 1 month ago
520
c6aa5bd9 Andy McCall 1 month ago ↶
521
change: Option< String> ,
2c9ddac3 Andy McCall 1 month ago ↶
522
523
# [ arg ( short = 'r', long, value_name = " REVSET" , conflicts_with = " change" ) ]
524
revset: Option< String> ,
d42369ab Andy McCall 1 month ago
525
c6aa5bd9 Andy McCall 1 month ago ↶
526
# [ arg ( long ) ]
527
json: bool ,
528
} ,
79ab8528 Andy McCall 1 month ago ↶
529
530
Git {
531
# [ command ( subcommand ) ]
532
cmd: GitCmd,
533
} ,
83e0677b Andy McCall 1 month ago ↶
534
535
Policy {
536
# [ command ( subcommand ) ]
537
cmd: PolicyCmd,
538
} ,
5ad2b565 Andy McCall 1 month ago ↶
539
fce44ae9 Andy McCall 1 month ago ↶
540
Config {
d42369ab Andy McCall 1 month ago
541
fce44ae9 Andy McCall 1 month ago ↶
542
key: String ,
8e9c64d1 Andy McCall 20 days ago ↶
543
614f55e1 Andy McCall 1 month ago ↶
544
# [ arg ( required_unless_present = " unset" ) ]
545
value: Option< String> ,
fce44ae9 Andy McCall 1 month ago ↶
546
547
# [ arg ( long ) ]
548
user: bool ,
614f55e1 Andy McCall 1 month ago ↶
549
550
# [ arg ( long ) ]
551
unset: bool ,
fce44ae9 Andy McCall 1 month ago ↶
552
} ,
553
}
554
555
# [ derive ( Subcommand ) ]
556
enum OpCmd {
98a1620a Andy McCall 1 month ago ↶
557
c6aa5bd9 Andy McCall 1 month ago ↶
558
Log {
98a1620a Andy McCall 1 month ago ↶
559
560
# [ arg ( short = 'n', long ) ]
561
limit: Option< usize > ,
d42369ab Andy McCall 1 month ago
562
c6aa5bd9 Andy McCall 1 month ago ↶
563
# [ arg ( long ) ]
564
json: bool ,
98a1620a Andy McCall 1 month ago ↶
565
} ,
566
567
Restore {
568
569
op: String ,
570
571
# [ arg ( long ) ]
572
discard: bool ,
573
} ,
574
575
Revert {
576
577
op: String ,
c6aa5bd9 Andy McCall 1 month ago ↶
578
} ,
fce44ae9 Andy McCall 1 month ago ↶
579
}
580
581
# [ derive ( Subcommand ) ]
4e88e774 Andy McCall 1 month ago ↶
582
enum WorkspaceCmd {
583
d42369ab Andy McCall 1 month ago
584
Add {
585
586
path: PathBuf,
587
588
changes: Vec< String> ,
589
} ,
590
1196b29b Andy McCall 1 month ago ↶
591
List {
d42369ab Andy McCall 1 month ago
592
1196b29b Andy McCall 1 month ago ↶
593
# [ arg ( long ) ]
594
json: bool ,
595
} ,
4e88e774 Andy McCall 1 month ago ↶
596
d42369ab Andy McCall 1 month ago
597
Forget {
598
599
workspace: String ,
600
} ,
4e88e774 Andy McCall 1 month ago ↶
601
}
602
603
# [ derive ( Subcommand ) ]
957fee30 Andy McCall 1 month ago ↶
604
enum BisectCmd {
605
606
Start,
607
d42369ab Andy McCall 1 month ago
608
Good {
609
610
changes: Vec< String> ,
611
} ,
957fee30 Andy McCall 1 month ago ↶
612
d42369ab Andy McCall 1 month ago
613
Bad {
614
615
changes: Vec< String> ,
616
} ,
957fee30 Andy McCall 1 month ago ↶
617
618
Skip,
619
620
Run {
d42369ab Andy McCall 1 month ago
621
957fee30 Andy McCall 1 month ago ↶
622
# [ arg ( required = true, trailing_var_arg = true ) ]
623
command: Vec< String> ,
624
} ,
625
c6aa5bd9 Andy McCall 1 month ago ↶
626
Status {
d42369ab Andy McCall 1 month ago
627
c6aa5bd9 Andy McCall 1 month ago ↶
628
# [ arg ( long ) ]
629
json: bool ,
630
} ,
957fee30 Andy McCall 1 month ago ↶
631
632
Reset,
633
}
634
635
# [ derive ( Subcommand ) ]
7b9809e6 Andy McCall 1 month ago ↶
636
enum BookmarkCmd {
637
d42369ab Andy McCall 1 month ago
638
Create {
639
640
name: String ,
4fe7d604 Andy McCall 1 month ago ↶
641
642
643
644
d42369ab Andy McCall 1 month ago
645
changes: Vec< String> ,
4fe7d604 Andy McCall 1 month ago ↶
646
647
648
# [ arg ( long, conflicts_with = " only" ) ]
649
upto: bool ,
b9bf7eec Andy McCall 22 days ago ↶
650
651
652
653
4fe7d604 Andy McCall 1 month ago ↶
654
# [ arg ( long ) ]
655
only: bool ,
d42369ab Andy McCall 1 month ago
656
} ,
7b9809e6 Andy McCall 1 month ago ↶
657
d42369ab Andy McCall 1 month ago
658
Set {
659
660
name: String ,
06d16dc2 Andy McCall 1 month ago ↶
661
662
663
d42369ab Andy McCall 1 month ago
664
changes: Vec< String> ,
06d16dc2 Andy McCall 1 month ago ↶
665
666
667
# [ arg ( long, conflicts_with = " only" ) ]
668
upto: bool ,
b9bf7eec Andy McCall 22 days ago ↶
669
670
671
672
06d16dc2 Andy McCall 1 month ago ↶
673
# [ arg ( long ) ]
674
only: bool ,
d42369ab Andy McCall 1 month ago
675
} ,
7b9809e6 Andy McCall 1 month ago ↶
676
d42369ab Andy McCall 1 month ago
677
Delete {
678
679
name: String ,
680
} ,
7b9809e6 Andy McCall 1 month ago ↶
681
c6aa5bd9 Andy McCall 1 month ago ↶
682
List {
14edbaaf Andy McCall 1 month ago ↶
683
684
# [ arg ( long, short ) ]
685
all: bool ,
bf3a6781 Andy McCall 1 month ago ↶
686
687
# [ arg ( long, short ) ]
688
verbose: bool ,
d42369ab Andy McCall 1 month ago
689
c6aa5bd9 Andy McCall 1 month ago ↶
690
# [ arg ( long ) ]
691
json: bool ,
692
} ,
bf3a6781 Andy McCall 1 month ago ↶
693
694
695
696
Show {
697
698
name: Option< String> ,
699
700
# [ arg ( long ) ]
701
json: bool ,
702
} ,
61e3bce7 Andy McCall 1 month ago ↶
703
7b9809e6 Andy McCall 1 month ago ↶
704
Switch {
14edbaaf Andy McCall 1 month ago ↶
705
7b9809e6 Andy McCall 1 month ago ↶
706
name: String ,
707
708
# [ arg ( long ) ]
709
discard: bool ,
61e3bce7 Andy McCall 1 month ago ↶
710
711
712
# [ arg ( long, conflicts_with = " discard" ) ]
713
carry: bool ,
51d4862a Andy McCall 18 days ago ↶
714
} ,
715
}
716
717
# [ derive ( Subcommand ) ]
718
enum WitnessCmd {
719
720
721
Serve {
722
723
# [ arg ( long ) ]
724
name: String ,
725
726
727
# [ arg ( long = " log" , required = true ) ]
728
logs: Vec< String> ,
729
730
# [ arg ( long, default_value = " witness-state" ) ]
731
state: PathBuf,
732
733
# [ arg ( long, default_value = " 127.0.0.1:8891" ) ]
734
bind: String ,
735
736
# [ arg ( long, requires = " tls_key" ) ]
737
tls_cert: Option< PathBuf> ,
738
739
# [ arg ( long, requires = " tls_cert" ) ]
740
tls_key: Option< PathBuf> ,
e59512f2 Andy McCall 18 days ago ↶
741
} ,
742
}
743
744
# [ derive ( Subcommand ) ]
745
enum TlogCmd {
746
747
748
749
Verify {
750
751
hub: Option< String> ,
752
753
# [ arg ( long, conflicts_with = " all" ) ]
754
key: Option< String> ,
755
756
# [ arg ( long ) ]
757
all: bool ,
758
759
# [ arg ( long ) ]
760
json: bool ,
ff1f62fe Andy McCall 1 month ago ↶
761
} ,
762
}
763
764
# [ derive ( Subcommand ) ]
765
enum AuthCmd {
766
767
768
Login {
769
770
hub: Option< String> ,
771
772
# [ arg ( long ) ]
773
with_token: bool ,
774
775
# [ arg ( long ) ]
776
ca: Option< PathBuf> ,
7b9809e6 Andy McCall 1 month ago ↶
777
} ,
ff1f62fe Andy McCall 1 month ago ↶
778
779
Status,
780
781
Logout {
782
783
hub: Option< String> ,
784
} ,
c895bc52 Andy McCall 18 days ago ↶
785
786
787
788
789
790
Grant {
791
792
hub: Option< String> ,
793
} ,
7b9809e6 Andy McCall 1 month ago ↶
794
}
795
796
# [ derive ( Subcommand ) ]
4dee277c Andy McCall 1 month ago ↶
797
enum SubmoduleCmd {
798
799
Add {
d42369ab Andy McCall 1 month ago
800
4dee277c Andy McCall 1 month ago ↶
801
url: String ,
d42369ab Andy McCall 1 month ago
802
4dee277c Andy McCall 1 month ago ↶
803
path: String ,
804
805
# [ arg ( long ) ]
806
bookmark: Option< String> ,
807
} ,
808
809
Update {
810
811
# [ arg ( long ) ]
812
init: bool ,
d42369ab Andy McCall 1 month ago
813
4dee277c Andy McCall 1 month ago ↶
814
paths: Vec< String> ,
815
} ,
816
c6aa5bd9 Andy McCall 1 month ago ↶
817
Status {
d42369ab Andy McCall 1 month ago
818
c6aa5bd9 Andy McCall 1 month ago ↶
819
# [ arg ( long ) ]
820
json: bool ,
821
} ,
4dee277c Andy McCall 1 month ago ↶
822
d42369ab Andy McCall 1 month ago
823
Remove {
824
825
path: String ,
826
} ,
4dee277c Andy McCall 1 month ago ↶
827
}
828
829
# [ derive ( Subcommand ) ]
642da263 Andy McCall 7 days ago ↶
830
enum ArtifactCmd {
831
832
Pack {
833
834
dir: std:: path:: PathBuf,
835
836
# [ arg ( long, default_value = " archive" ) ]
837
kind: String ,
838
839
# [ arg ( long ) ]
840
arch: Option< String> ,
841
842
# [ arg ( long ) ]
843
os: Option< String> ,
844
845
# [ arg ( long = " entrypoint" , value_name = " WORD" ) ]
846
entrypoint: Vec< String> ,
847
848
# [ arg ( long = " env" , value_name = " KEY=VALUE" ) ]
849
env: Vec< String> ,
850
851
# [ arg ( long = " label" , value_name = " KEY=VALUE" ) ]
852
labels: Vec< String> ,
853
854
# [ arg ( long ) ]
855
json: bool ,
856
} ,
857
858
List {
859
860
# [ arg ( long ) ]
861
json: bool ,
862
} ,
863
864
Show {
865
866
name: String ,
867
868
# [ arg ( long ) ]
869
json: bool ,
870
} ,
871
872
Unpack {
873
874
name: String ,
875
876
dest: std:: path:: PathBuf,
877
} ,
878
879
Verify {
880
881
name: String ,
882
} ,
883
}
884
885
# [ derive ( Subcommand ) ]
fc1a466a Andy McCall 1 month ago ↶
886
enum ReceiptCmd {
887
888
List {
889
890
rev: Option< String> ,
891
892
# [ arg ( long ) ]
893
json: bool ,
894
} ,
895
896
Show {
897
898
receipt: String ,
899
900
# [ arg ( long ) ]
901
rev: Option< String> ,
902
903
# [ arg ( long ) ]
904
json: bool ,
905
} ,
906
907
Export {
908
909
receipt: String ,
910
911
file: String ,
912
913
# [ arg ( long ) ]
914
rev: Option< String> ,
a39754d0 Andy McCall 18 days ago ↶
915
916
917
918
919
# [ arg ( long, default_value = " oxygen" , value_parser = [" oxygen" , " slsa" ] ) ]
920
format: String ,
fc1a466a Andy McCall 1 month ago ↶
921
} ,
922
923
Verify {
924
925
file: String ,
926
927
# [ arg ( long ) ]
928
json: bool ,
929
} ,
930
931
Import {
932
933
file: String ,
934
} ,
935
}
936
937
# [ derive ( Subcommand ) ]
132b884b Andy McCall 1 month ago ↶
938
enum TagCmd {
939
940
Create {
d42369ab Andy McCall 1 month ago
941
132b884b Andy McCall 1 month ago ↶
942
name: String ,
d42369ab Andy McCall 1 month ago
943
132b884b Andy McCall 1 month ago ↶
944
changes: Vec< String> ,
d42369ab Andy McCall 1 month ago
945
132b884b Andy McCall 1 month ago ↶
946
# [ arg ( short, long, default_value = " " ) ]
947
message: String ,
948
} ,
b63fc7a7 Andy McCall 11 days ago ↶
949
950
951
952
Delete {
953
954
name: String ,
955
956
# [ arg ( short, long, default_value = " " ) ]
957
reason: String ,
958
} ,
d42369ab Andy McCall 1 month ago
959
1196b29b Andy McCall 1 month ago ↶
960
List {
d42369ab Andy McCall 1 month ago
961
1196b29b Andy McCall 1 month ago ↶
962
# [ arg ( long ) ]
963
json: bool ,
964
} ,
132b884b Andy McCall 1 month ago ↶
965
}
966
967
# [ derive ( Subcommand ) ]
fce44ae9 Andy McCall 1 month ago ↶
968
enum RemoteCmd {
d42369ab Andy McCall 1 month ago
969
75167672 Andy McCall 1 month ago
970
Add {
d42369ab Andy McCall 1 month ago
971
75167672 Andy McCall 1 month ago
972
name: String ,
9aa39904 Andy McCall 1 month ago ↶
973
75167672 Andy McCall 1 month ago
974
url: String ,
9aa39904 Andy McCall 1 month ago ↶
975
976
# [ arg ( long ) ]
977
profile: Option< String> ,
978
979
# [ arg ( long ) ]
980
region: Option< String> ,
981
982
# [ arg ( long ) ]
983
endpoint: Option< String> ,
984
985
# [ arg ( long ) ]
986
credentials: Option< String> ,
75167672 Andy McCall 1 month ago
987
} ,
9aa39904 Andy McCall 1 month ago ↶
988
989
Check {
990
991
name: String ,
992
} ,
d42369ab Andy McCall 1 month ago
993
75167672 Andy McCall 1 month ago
994
Remove {
d42369ab Andy McCall 1 month ago
995
75167672 Andy McCall 1 month ago
996
name: String ,
997
} ,
d42369ab Andy McCall 1 month ago
998
c6aa5bd9 Andy McCall 1 month ago ↶
999
List {
d42369ab Andy McCall 1 month ago
1000
c6aa5bd9 Andy McCall 1 month ago ↶
1001
# [ arg ( long ) ]
1002
json: bool ,
1003
} ,
fce44ae9 Andy McCall 1 month ago ↶
1004
}
1005
1006
# [ derive ( Subcommand ) ]
d82e4409 Andy McCall 1 month ago ↶
1007
enum ProposalCmd {
1008
1009
Show {
d42369ab Andy McCall 1 month ago
1010
d82e4409 Andy McCall 1 month ago ↶
1011
url: String ,
d42369ab Andy McCall 1 month ago
1012
d82e4409 Andy McCall 1 month ago ↶
1013
# [ arg ( long ) ]
1014
json: bool ,
1015
} ,
1016
1017
Land {
d42369ab Andy McCall 1 month ago
1018
d82e4409 Andy McCall 1 month ago ↶
1019
url: String ,
1020
1021
# [ arg ( long ) ]
1022
force: bool ,
1023
} ,
1024
}
1025
1026
# [ derive ( Subcommand ) ]
fce44ae9 Andy McCall 1 month ago ↶
1027
enum IdentityCmd {
1028
1029
Create {
d42369ab Andy McCall 1 month ago
1030
fce44ae9 Andy McCall 1 month ago ↶
1031
# [ arg ( long ) ]
1032
name: Option< String> ,
d42369ab Andy McCall 1 month ago
1033
fce44ae9 Andy McCall 1 month ago ↶
1034
# [ arg ( long ) ]
1035
email: Option< String> ,
1036
1037
# [ arg ( long ) ]
1038
local: bool ,
28fc23d7 Andy McCall 1 month ago ↶
1039
1040
# [ arg ( long ) ]
1041
expires: Option< u64 > ,
fce44ae9 Andy McCall 1 month ago ↶
1042
} ,
1043
1044
Show,
83e0677b Andy McCall 1 month ago ↶
1045
d42369ab Andy McCall 1 month ago
1046
Export {
a39754d0 Andy McCall 18 days ago ↶
1047
d42369ab Andy McCall 1 month ago
1048
path: Option< PathBuf> ,
a39754d0 Andy McCall 18 days ago ↶
1049
1050
1051
# [ arg ( long ) ]
1052
pem: bool ,
d42369ab Andy McCall 1 month ago
1053
} ,
7aa2dc93 Andy McCall 1 month ago ↶
1054
1055
SignChallenge {
d42369ab Andy McCall 1 month ago
1056
7aa2dc93 Andy McCall 1 month ago ↶
1057
challenge: String ,
d42369ab Andy McCall 1 month ago
1058
7aa2dc93 Andy McCall 1 month ago ↶
1059
# [ arg ( long ) ]
1060
json: bool ,
1061
} ,
28fc23d7 Andy McCall 1 month ago ↶
1062
1063
Rotate,
1064
1065
Renew {
d42369ab Andy McCall 1 month ago
1066
28fc23d7 Andy McCall 1 month ago ↶
1067
# [ arg ( long ) ]
1068
expires: u64 ,
1069
} ,
1070
1071
Revoke {
1072
1073
key: Option< String> ,
d42369ab Andy McCall 1 month ago
1074
28fc23d7 Andy McCall 1 month ago ↶
1075
# [ arg ( long, default_value = " " ) ]
1076
reason: String ,
1077
} ,
1078
1079
Delegate {
1080
# [ command ( subcommand ) ]
1081
cmd: DelegateCmd,
1082
} ,
1083
}
1084
1085
# [ derive ( Subcommand ) ]
1086
enum DelegateCmd {
1087
d42369ab Andy McCall 1 month ago
1088
Add {
614f55e1 Andy McCall 1 month ago ↶
1089
1090
# [ arg ( required = true ) ]
1091
identity_file: Vec< PathBuf> ,
7ba155f2 Andy McCall 1 month ago ↶
1092
1093
1094
# [ arg ( long, default_value = " changes" ) ]
1095
scope: String ,
1096
1097
# [ arg ( long ) ]
1098
expires: Option< String> ,
d42369ab Andy McCall 1 month ago
1099
} ,
28fc23d7 Andy McCall 1 month ago ↶
1100
d42369ab Andy McCall 1 month ago
1101
Remove {
1102
1103
key: String ,
1104
} ,
28fc23d7 Andy McCall 1 month ago ↶
1105
1106
List,
fce44ae9 Andy McCall 1 month ago ↶
1107
}
1108
83e0677b Andy McCall 1 month ago ↶
1109
# [ derive ( Subcommand ) ]
79ab8528 Andy McCall 1 month ago ↶
1110
enum GitCmd {
1111
30ea9c1e Andy McCall 1 month ago ↶
1112
Export {
d42369ab Andy McCall 1 month ago
1113
30ea9c1e Andy McCall 1 month ago ↶
1114
git_dir: PathBuf,
1115
1116
# [ arg ( long ) ]
1117
branch: Option< String> ,
1118
} ,
1119
1120
Fetch {
d42369ab Andy McCall 1 month ago
1121
30ea9c1e Andy McCall 1 month ago ↶
1122
url: String ,
d42369ab Andy McCall 1 month ago
1123
30ea9c1e Andy McCall 1 month ago ↶
1124
# [ arg ( long, default_value = " main" ) ]
1125
branch: String ,
d6e0d5b8 Andy McCall 25 days ago ↶
1126
1127
# [ arg ( long ) ]
1128
claim: bool ,
30ea9c1e Andy McCall 1 month ago ↶
1129
} ,
1130
1131
Push {
d42369ab Andy McCall 1 month ago
1132
30ea9c1e Andy McCall 1 month ago ↶
1133
url: String ,
d42369ab Andy McCall 1 month ago
1134
30ea9c1e Andy McCall 1 month ago ↶
1135
# [ arg ( long, default_value = " main" ) ]
1136
branch: String ,
1137
} ,
54e2e630 Andy McCall 29 days ago ↶
1138
1139
Recover,
62794ecc Andy McCall 1 month ago ↶
1140
1141
Verify {
1142
1143
git_dir: PathBuf,
1144
1145
# [ arg ( long, default_value = " main" ) ]
1146
branch: String ,
7eac74ab Andy McCall 1 month ago ↶
1147
1148
# [ arg ( long, value_name = " N" ) ]
1149
last: Option< usize > ,
8b7986dd Andy McCall 26 days ago ↶
1150
1151
# [ arg ( long, value_name = " N" , default_value_t = 50 ) ]
1152
max_differences: usize ,
62794ecc Andy McCall 1 month ago ↶
1153
} ,
c3069537 Andy McCall 1 month ago ↶
1154
1155
Import {
d42369ab Andy McCall 1 month ago
1156
c3069537 Andy McCall 1 month ago ↶
1157
git_dir: PathBuf,
d42369ab Andy McCall 1 month ago
1158
c3069537 Andy McCall 1 month ago ↶
1159
dest: PathBuf,
d42369ab Andy McCall 1 month ago
1160
c3069537 Andy McCall 1 month ago ↶
1161
# [ arg ( long, default_value = " main" ) ]
1162
branch: String ,
d6e0d5b8 Andy McCall 25 days ago ↶
1163
1164
# [ arg ( long ) ]
1165
claim: bool ,
c3069537 Andy McCall 1 month ago ↶
1166
} ,
79ab8528 Andy McCall 1 month ago ↶
1167
}
1168
1169
# [ derive ( Subcommand ) ]
83e0677b Andy McCall 1 month ago ↶
1170
enum PolicyCmd {
1171
1172
Init,
1173
c6aa5bd9 Andy McCall 1 month ago ↶
1174
Show {
d42369ab Andy McCall 1 month ago
1175
c6aa5bd9 Andy McCall 1 month ago ↶
1176
# [ arg ( long ) ]
1177
json: bool ,
1178
} ,
83e0677b Andy McCall 1 month ago ↶
1179
1180
Grant {
d42369ab Andy McCall 1 month ago
1181
83e0677b Andy McCall 1 month ago ↶
1182
identity_file: PathBuf,
1183
1184
# [ arg ( long ) ]
1185
pattern: Option< String> ,
28fc23d7 Andy McCall 1 month ago ↶
1186
1187
# [ arg ( long ) ]
1188
out: Option< PathBuf> ,
83e0677b Andy McCall 1 month ago ↶
1189
} ,
3a6effc7 Andy McCall 18 days ago ↶
1190
1191
GrantSubject {
1192
1193
subject: String ,
1194
1195
# [ arg ( long ) ]
1196
issuer: PathBuf,
1197
1198
# [ arg ( long, default_value = " changes,refs" ) ]
1199
scope: String ,
1200
1201
# [ arg ( long ) ]
1202
pattern: Option< String> ,
1203
1204
# [ arg ( long ) ]
1205
out: Option< PathBuf> ,
1206
} ,
83e0677b Andy McCall 1 month ago ↶
1207
28fc23d7 Andy McCall 1 month ago ↶
1208
Revoke {
d42369ab Andy McCall 1 month ago
1209
28fc23d7 Andy McCall 1 month ago ↶
1210
key: String ,
1211
1212
# [ arg ( long ) ]
1213
out: Option< PathBuf> ,
1214
} ,
1215
1216
Root {
1217
# [ command ( subcommand ) ]
1218
cmd: RootCmd,
1219
} ,
1220
1221
Sign {
d42369ab Andy McCall 1 month ago
1222
28fc23d7 Andy McCall 1 month ago ↶
1223
proposal: PathBuf,
1224
1225
# [ arg ( long ) ]
1226
out: Option< PathBuf> ,
1227
} ,
1228
}
1229
1230
# [ derive ( Subcommand ) ]
1231
enum RootCmd {
1232
1233
Add {
d42369ab Andy McCall 1 month ago
1234
28fc23d7 Andy McCall 1 month ago ↶
1235
identity_file: PathBuf,
d42369ab Andy McCall 1 month ago
1236
28fc23d7 Andy McCall 1 month ago ↶
1237
# [ arg ( long ) ]
1238
out: Option< PathBuf> ,
1239
} ,
1240
1241
Remove {
d42369ab Andy McCall 1 month ago
1242
28fc23d7 Andy McCall 1 month ago ↶
1243
key: String ,
d42369ab Andy McCall 1 month ago
1244
28fc23d7 Andy McCall 1 month ago ↶
1245
# [ arg ( long ) ]
1246
out: Option< PathBuf> ,
1247
} ,
1248
1249
Threshold {
d42369ab Andy McCall 1 month ago
1250
28fc23d7 Andy McCall 1 month ago ↶
1251
n: u32 ,
d42369ab Andy McCall 1 month ago
1252
28fc23d7 Andy McCall 1 month ago ↶
1253
# [ arg ( long ) ]
1254
out: Option< PathBuf> ,
1255
} ,
83e0677b Andy McCall 1 month ago ↶
1256
}
1257
fce44ae9 Andy McCall 1 month ago ↶
1258
1259
fn open ( ) -> Result< Repo> {
98a1620a Andy McCall 1 month ago ↶
1260
let repo = Repo:: open( & std:: env:: current_dir( ) ? ) .context ( " opening repository" ) ? ;
1261
match AT_OP .get ( ) .and_then ( | o | o.as_deref ( ) ) {
1262
Some ( op) => Ok ( repo.at_op ( op) ? ) ,
1263
None => Ok ( repo) ,
1264
}
fce44ae9 Andy McCall 1 month ago ↶
1265
}
1266
d42369ab Andy McCall 1 month ago
1267
1268
fn man ( dir : Option< PathBuf> ) -> Result< i32 > {
1269
use clap:: CommandFactory;
1270
let cmd = Cli:: command( ) ;
1271
match dir {
1272
Some ( dir) => {
1273
std:: fs:: create_dir_all( & dir) ? ;
1274
clap_mangen:: generate_to( cmd, & dir) ? ;
1275
let pages = std:: fs:: read_dir( & dir) ?
1276
.filter ( | e | {
1277
e.as_ref ( )
1278
.is_ok_and ( | e | e.path ( ) .extension ( ) .is_some_and ( | x | x = = " 1" ) )
1279
} )
1280
.count ( ) ;
1281
println! (
1282
" {} " ,
1283
ui:: done( format! ( " Wrote {pages} man pages to {} " , dir.display ( ) ) )
1284
) ;
1285
}
1286
None => clap_mangen:: Man:: new( cmd) .render ( & mut std:: io:: stdout( ) ) ? ,
1287
}
1288
Ok ( 0 )
1289
}
1290
fce44ae9 Andy McCall 1 month ago ↶
1291
1292
pub fn run ( ) -> Result< i32 > {
8d803563 Andy McCall 1 month ago ↶
1293
1294
oxy_strata:: register( ) ;
fce44ae9 Andy McCall 1 month ago ↶
1295
let cli = Cli:: parse( ) ;
135212de Andy McCall 1 month ago ↶
1296
ui:: init( cli.plain) ;
98a1620a Andy McCall 1 month ago ↶
1297
AT_OP .set ( cli.at_op.clone ( ) ) .ok ( ) ;
fce44ae9 Andy McCall 1 month ago ↶
1298
match cli.cmd {
d42369ab Andy McCall 1 month ago
1299
Cmd:: Completions { shell } => {
1300
use clap:: CommandFactory;
1301
clap_complete:: generate( shell, & mut Cli:: command( ) , " oxy" , & mut std:: io:: stdout( ) ) ;
1302
Ok ( 0 )
1303
}
1304
Cmd:: Man { dir } => man ( dir) ,
d069701a Andy McCall 1 month ago ↶
1305
Cmd:: Init { path, bare, store } => workspace:: init( path, bare, store.as_deref ( ) ) ,
50a046e4 Andy McCall 1 month ago ↶
1306
Cmd:: Status { json } => workspace:: status( json) ,
75167672 Andy McCall 1 month ago
1307
Cmd:: Prompt {
1308
format,
1309
glyphs,
1310
color,
1311
} => workspace:: prompt( & format, glyphs, color.as_deref ( ) ) ,
1312
Cmd:: Commit {
1313
message,
6a81dbab Andy McCall 1 month ago ↶
1314
file,
75167672 Andy McCall 1 month ago
1315
depends_on,
1316
paths,
1317
interactive,
1318
hunks,
6a81dbab Andy McCall 1 month ago ↶
1319
} => {
1320
let message = match ( message, file) {
1321
( Some ( m) , _ ) => m,
1322
( None , Some ( f) ) if f.as_os_str ( ) = = " -" => {
1323
let mut s = String :: new( ) ;
1324
std:: io:: Read:: read_to_string( & mut std:: io:: stdin( ) , & mut s) ? ;
1325
s
1326
}
1327
( None , Some ( f) ) => std:: fs:: read_to_string( & f) .map_err ( | e | {
1328
anyhow:: anyhow! ( " reading the message from {}: {e}" , f.display ( ) )
1329
} ) ? ,
1330
( None , None ) => anyhow:: bail! ( " a commit message is required (-m or -F)" ) ,
1331
} ;
1332
workspace:: commit( & message, & depends_on, & paths, interactive, & hunks)
1333
}
c6aa5bd9 Andy McCall 1 month ago ↶
1334
Cmd:: Cat { path, change } => workspace:: cat( & path, change.as_deref ( ) ) ,
1335
Cmd:: Root { json } => workspace:: root( json) ,
1336
Cmd:: Version { json } => workspace:: version( json) ,
1337
Cmd:: Discard { paths, hunks } => workspace:: discard( & paths, & hunks) ,
1338
Cmd:: Hunks { json } => workspace:: hunks( json) ,
728da0f9 Andy McCall 1 month ago ↶
1339
Cmd:: Squash { change, into } => workspace:: squash( & change, & into) ,
e266b7d4 Andy McCall 1 month ago ↶
1340
Cmd:: Rebase {
1341
change,
1342
onto,
1343
into_working_copy,
1344
} => workspace:: rebase( & change, & onto, into_working_copy) ,
957fee30 Andy McCall 1 month ago ↶
1345
Cmd:: Blame { path, json } => workspace:: blame( & path, json) ,
1346
Cmd:: Bisect { cmd } => match cmd {
1347
BisectCmd:: Start => workspace:: bisect_start( ) ,
1348
BisectCmd:: Good { changes } => workspace:: bisect_mark( Some ( true ) , & changes) ,
1349
BisectCmd:: Bad { changes } => workspace:: bisect_mark( Some ( false ) , & changes) ,
1350
BisectCmd:: Skip => workspace:: bisect_mark( None , & [ ] ) ,
1351
BisectCmd:: Run { command } => workspace:: bisect_run( & command) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1352
BisectCmd:: Status { json } => workspace:: bisect_status( json) ,
957fee30 Andy McCall 1 month ago ↶
1353
BisectCmd:: Reset => workspace:: bisect_reset( ) ,
1354
} ,
75167672 Andy McCall 1 month ago
1355
Cmd:: Log {
47ce8b8e Andy McCall 1 month ago ↶
1356
revset,
75167672 Andy McCall 1 month ago
1357
limit,
1358
verbose,
1359
path,
83d61e80 Andy McCall 1 month ago ↶
1360
lines,
75167672 Andy McCall 1 month ago
1361
json,
47ce8b8e Andy McCall 1 month ago ↶
1362
} => workspace:: log(
1363
revset.as_deref ( ) ,
1364
limit,
1365
verbose,
1366
path.as_deref ( ) ,
1367
lines.as_deref ( ) ,
1368
json,
1369
) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1370
Cmd:: Diff { change, json } => workspace:: diff( change.as_deref ( ) , json) ,
6a81dbab Andy McCall 1 month ago ↶
1371
Cmd:: Describe {
1372
message,
1373
change,
1374
json,
1375
} => match message {
1376
Some ( m) => workspace:: describe( & m, change.as_deref ( ) ) ,
1377
None if change.is_some ( ) => {
1378
anyhow:: bail! (
1379
" naming works on the working copy; to change a head's message pass -m"
1380
)
1381
}
1382
None => workspace:: describe_name( json) ,
1383
} ,
69953b50 Andy McCall 17 days ago ↶
1384
Cmd:: Amend {
1385
message,
1386
into,
1387
paths,
1388
} => workspace:: amend( message.as_deref ( ) , into.as_deref ( ) , & paths) ,
23b217d7 Andy McCall 1 month ago ↶
1389
Cmd:: Split { change, paths } => workspace:: split( & change, & paths) ,
2c9ddac3 Andy McCall 1 month ago ↶
1390
Cmd:: Abandon {
1391
change,
1392
revset,
1393
yes,
1394
} => workspace:: abandon( change.as_deref ( ) , revset.as_deref ( ) , yes) ,
1395
Cmd:: Show {
1396
change,
1397
revset,
0299076f Andy McCall 17 days ago ↶
1398
stat,
2c9ddac3 Andy McCall 1 month ago ↶
1399
json,
0299076f Andy McCall 17 days ago ↶
1400
} => workspace:: show( change.as_deref ( ) , revset.as_deref ( ) , stat, json) ,
1c2bd9ab Andy McCall 1 month ago ↶
1401
Cmd:: Checkout {
1402
changes,
1403
discard,
1404
carry,
1405
} => workspace:: checkout( & changes, discard, carry) ,
9bd98cfb Andy McCall 9 days ago ↶
1406
Cmd:: Resolve {
1407
paths,
1408
both,
1409
reverse,
1410
json,
1411
} => workspace:: resolve( & paths, both, reverse, json) ,
fce44ae9 Andy McCall 1 month ago ↶
1412
Cmd:: Undo => workspace:: undo( ) ,
b689779e Andy McCall 24 days ago ↶
1413
Cmd:: Gc {
1414
now,
1415
expire_snapshots,
1416
remote,
1417
} => match remote {
d8d93678 Andy McCall 1 month ago ↶
1418
Some ( name) => workspace:: gc_remote( & name, now) ,
b689779e Andy McCall 24 days ago ↶
1419
None => workspace:: gc( now, expire_snapshots) ,
d8d93678 Andy McCall 1 month ago ↶
1420
} ,
387335ff Andy McCall 1 month ago ↶
1421
Cmd:: Fsck { json } => workspace:: fsck( json) ,
3e5772cc Andy McCall 1 month ago ↶
1422
Cmd:: Doctor { offline, json } => workspace:: doctor( offline, json) ,
252e8cb2 Andy McCall 1 month ago ↶
1423
Cmd:: Checkpoint => workspace:: checkpoint( ) ,
98a1620a Andy McCall 1 month ago ↶
1424
Cmd:: Op { cmd } => match cmd {
1425
OpCmd:: Log { limit, json } => workspace:: op_log( limit, json) ,
1426
OpCmd:: Restore { op, discard } => workspace:: op_restore( & op, discard) ,
1427
OpCmd:: Revert { op } => workspace:: op_revert( & op) ,
1428
} ,
75167672 Andy McCall 1 month ago
1429
Cmd:: Clone {
1430
url,
1431
dest,
1432
max_blob,
1433
sparse,
1434
depth,
14edbaaf Andy McCall 1 month ago ↶
1435
recursive,
1436
} => sync:: clone( & url, dest, max_blob.as_deref ( ) , & sparse, depth, recursive) ,
2863456a Andy McCall 1 month ago ↶
1437
Cmd:: Deepen { depth, remote } => sync:: deepen( & remote, depth) ,
7421309f Andy McCall 1 month ago ↶
1438
Cmd:: Sparse { paths } => workspace:: sparse( & paths) ,
cdb5beba Andy McCall 1 month ago ↶
1439
Cmd:: Lock { path } => workspace:: lock( & path) ,
1440
Cmd:: Unlock { path } => workspace:: unlock( & path) ,
4e88e774 Andy McCall 1 month ago ↶
1441
Cmd:: Workspace { cmd } => match cmd {
1442
WorkspaceCmd:: Add { path, changes } => workspace:: workspace_add( & path, & changes) ,
1196b29b Andy McCall 1 month ago ↶
1443
WorkspaceCmd:: List { json } => workspace:: workspace_list( json) ,
4e88e774 Andy McCall 1 month ago ↶
1444
WorkspaceCmd:: Forget { workspace } => workspace:: workspace_forget( & workspace) ,
1445
} ,
7b9809e6 Andy McCall 1 month ago ↶
1446
Cmd:: Bookmark { cmd } => match cmd {
4fe7d604 Andy McCall 1 month ago ↶
1447
BookmarkCmd:: Create {
1448
name,
1449
changes,
1450
upto,
1451
only,
1452
} => workspace:: bookmark_create( & name, & changes, upto, only) ,
06d16dc2 Andy McCall 1 month ago ↶
1453
BookmarkCmd:: Set {
1454
name,
1455
changes,
1456
upto,
1457
only,
1458
} => workspace:: bookmark_set( & name, & changes, upto, only) ,
7b9809e6 Andy McCall 1 month ago ↶
1459
BookmarkCmd:: Delete { name } => workspace:: bookmark_delete( & name) ,
bf3a6781 Andy McCall 1 month ago ↶
1460
BookmarkCmd:: List { all, verbose, json } => {
1461
workspace:: bookmark_list( all, verbose, json)
1462
}
1463
BookmarkCmd:: Show { name, json } => workspace:: bookmark_show( name.as_deref ( ) , json) ,
61e3bce7 Andy McCall 1 month ago ↶
1464
BookmarkCmd:: Switch {
1465
name,
1466
discard,
1467
carry,
1468
} => workspace:: bookmark_switch( & name, discard, carry) ,
7b9809e6 Andy McCall 1 month ago ↶
1469
} ,
1470
Cmd:: Merge { bookmark } => workspace:: merge( & bookmark) ,
ff1f62fe Andy McCall 1 month ago ↶
1471
Cmd:: Auth { cmd } => match cmd {
1472
AuthCmd:: Login {
1473
hub,
1474
with_token,
1475
ca,
1476
} => auth:: login( hub.as_deref ( ) , with_token, ca) ,
1477
AuthCmd:: Status => auth:: status( ) ,
1478
AuthCmd:: Logout { hub } => auth:: logout( hub.as_deref ( ) ) ,
c895bc52 Andy McCall 18 days ago ↶
1479
AuthCmd:: Grant { hub } => auth:: grant( hub.as_deref ( ) ) ,
ff1f62fe Andy McCall 1 month ago ↶
1480
} ,
4dee277c Andy McCall 1 month ago ↶
1481
Cmd:: Submodule { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1482
SubmoduleCmd:: Add {
1483
url,
1484
path,
1485
bookmark,
1486
} => sync:: submodule_add( & url, & path, bookmark.as_deref ( ) ) ,
4dee277c Andy McCall 1 month ago ↶
1487
SubmoduleCmd:: Update { init, paths } => sync:: submodule_update( init, & paths) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1488
SubmoduleCmd:: Status { json } => sync:: submodule_status( json) ,
4dee277c Andy McCall 1 month ago ↶
1489
SubmoduleCmd:: Remove { path } => sync:: submodule_remove( & path) ,
e59512f2 Andy McCall 18 days ago ↶
1490
} ,
51d4862a Andy McCall 18 days ago ↶
1491
Cmd:: Witness {
1492
cmd:
1493
WitnessCmd:: Serve {
1494
name,
1495
logs,
1496
state,
1497
bind,
1498
tls_cert,
1499
tls_key,
1500
} ,
1501
} => tlog:: witness_serve( & name, & logs, state, & bind, tls_cert.zip ( tls_key) ) ,
e59512f2 Andy McCall 18 days ago ↶
1502
Cmd:: Tlog { cmd } => match cmd {
1503
TlogCmd:: Verify {
1504
hub,
1505
key,
1506
all,
1507
json,
1508
} => tlog:: verify( hub.as_deref ( ) , key.as_deref ( ) , all, json) ,
642da263 Andy McCall 7 days ago ↶
1509
} ,
1510
Cmd:: Artifact { cmd } => match cmd {
1511
ArtifactCmd:: Pack {
1512
dir,
1513
kind,
1514
arch,
1515
os,
1516
entrypoint,
1517
env,
1518
labels,
1519
json,
1520
} => artifact:: pack( & dir, & kind, arch, os, entrypoint, & env, & labels, json) ,
1521
ArtifactCmd:: List { json } => artifact:: list( json) ,
1522
ArtifactCmd:: Show { name, json } => artifact:: show( & name, json) ,
1523
ArtifactCmd:: Unpack { name, dest } => artifact:: unpack( & name, & dest) ,
1524
ArtifactCmd:: Verify { name } => artifact:: verify( & name) ,
fc1a466a Andy McCall 1 month ago ↶
1525
} ,
1526
Cmd:: Receipt { cmd } => match cmd {
1527
ReceiptCmd:: List { rev, json } => receipt:: list( rev.as_deref ( ) , json) ,
1528
ReceiptCmd:: Show {
1529
receipt: r,
1530
rev,
1531
json,
1532
} => receipt:: show( & r, rev.as_deref ( ) , json) ,
1533
ReceiptCmd:: Export {
1534
receipt: r,
1535
file,
1536
rev,
a39754d0 Andy McCall 18 days ago ↶
1537
format,
1538
} => receipt:: export( & r, & file, rev.as_deref ( ) , & format) ,
fc1a466a Andy McCall 1 month ago ↶
1539
ReceiptCmd:: Verify { file, json } => receipt:: verify( & file, json) ,
1540
ReceiptCmd:: Import { file } => receipt:: import( & file) ,
4dee277c Andy McCall 1 month ago ↶
1541
} ,
132b884b Andy McCall 1 month ago ↶
1542
Cmd:: Tag { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1543
TagCmd:: Create {
1544
name,
1545
changes,
1546
message,
1547
} => workspace:: tag_create( & name, & changes, & message) ,
b63fc7a7 Andy McCall 11 days ago ↶
1548
TagCmd:: Delete { name, reason } => workspace:: tag_delete( & name, & reason) ,
1196b29b Andy McCall 1 month ago ↶
1549
TagCmd:: List { json } => workspace:: tag_list( json) ,
132b884b Andy McCall 1 month ago ↶
1550
} ,
fce44ae9 Andy McCall 1 month ago ↶
1551
Cmd:: Remote { cmd } => match cmd {
9aa39904 Andy McCall 1 month ago ↶
1552
RemoteCmd:: Add {
1553
name,
1554
url,
1555
profile,
1556
region,
1557
endpoint,
1558
credentials,
1559
} => sync:: remote_add(
1560
& name,
1561
& url,
1562
& [
1563
( " profile" , profile) ,
1564
( " region" , region) ,
1565
( " endpoint" , endpoint) ,
1566
( " credentials" , credentials) ,
1567
] ,
1568
) ,
1569
RemoteCmd:: Check { name } => sync:: remote_check( & name) ,
fce44ae9 Andy McCall 1 month ago ↶
1570
RemoteCmd:: Remove { name } => sync:: remote_remove( & name) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1571
RemoteCmd:: List { json } => sync:: remote_list( json) ,
fce44ae9 Andy McCall 1 month ago ↶
1572
} ,
c6aa5bd9 Andy McCall 1 month ago ↶
1573
Cmd:: Fetch { remote, json } => sync:: fetch( remote.as_deref ( ) , json) ,
1574
Cmd:: Pull { remote, json } => sync:: pull( remote.as_deref ( ) , json) ,
75167672 Andy McCall 1 month ago
1575
Cmd:: Push {
1576
remote,
1577
force,
1578
bookmark,
f8c69576 Andy McCall 1 month ago ↶
1579
delete,
75167672 Andy McCall 1 month ago
1580
json,
f8c69576 Andy McCall 1 month ago ↶
1581
} => match delete {
1582
Some ( name) => sync:: push_delete( remote.as_deref ( ) , & name, json) ,
1583
None => sync:: push( remote.as_deref ( ) , force, bookmark.as_deref ( ) , json) ,
1584
} ,
75167672 Andy McCall 1 month ago
1585
Cmd:: Serve {
1586
root,
1587
bind,
1588
tokens,
1589
tls_cert,
1590
tls_key,
1591
} => sync:: serve( root, & bind, tokens, tls_cert.zip ( tls_key) ) ,
fce44ae9 Andy McCall 1 month ago ↶
1592
Cmd:: Identity { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1593
IdentityCmd:: Create {
1594
name,
1595
email,
1596
local,
1597
expires,
1598
} => identity:: create( name, email, local, expires) ,
fce44ae9 Andy McCall 1 month ago ↶
1599
IdentityCmd:: Show => identity:: show( ) ,
a39754d0 Andy McCall 18 days ago ↶
1600
IdentityCmd:: Export { path, pem } => identity:: export( path, pem) ,
119bbf50 Andy McCall 1 month ago ↶
1601
IdentityCmd:: SignChallenge { challenge, json } => {
1602
identity:: sign_challenge( & challenge, json)
1603
}
28fc23d7 Andy McCall 1 month ago ↶
1604
IdentityCmd:: Rotate => identity:: rotate( ) ,
1605
IdentityCmd:: Renew { expires } => identity:: renew( expires) ,
1606
IdentityCmd:: Revoke { key, reason } => identity:: revoke( key.as_deref ( ) , & reason) ,
1607
IdentityCmd:: Delegate { cmd } => match cmd {
7ba155f2 Andy McCall 1 month ago ↶
1608
DelegateCmd:: Add {
1609
identity_file,
1610
scope,
1611
expires,
1612
} => identity:: delegate_add( & identity_file, & scope, expires.as_deref ( ) ) ,
28fc23d7 Andy McCall 1 month ago ↶
1613
DelegateCmd:: Remove { key } => identity:: delegate_remove( & key) ,
1614
DelegateCmd:: List => identity:: delegate_list( ) ,
1615
} ,
83e0677b Andy McCall 1 month ago ↶
1616
} ,
75167672 Andy McCall 1 month ago
1617
Cmd:: Git {
1618
cmd: GitCmd:: Export { git_dir, branch } ,
1619
} => sync:: git_export( & git_dir, branch.as_deref ( ) ) ,
1620
Cmd:: Git {
d6e0d5b8 Andy McCall 25 days ago ↶
1621
cmd: GitCmd:: Fetch { url, branch, claim } ,
1622
} => sync:: git_fetch( & url, & branch, claim) ,
75167672 Andy McCall 1 month ago
1623
Cmd:: Git {
1624
cmd: GitCmd:: Push { url, branch } ,
1625
} => sync:: git_push( & url, & branch) ,
1626
Cmd:: Git {
54e2e630 Andy McCall 29 days ago ↶
1627
cmd: GitCmd:: Recover,
1628
} => sync:: git_recover( ) ,
1629
Cmd:: Git {
75167672 Andy McCall 1 month ago
1630
cmd:
1631
GitCmd:: Import {
1632
git_dir,
1633
dest,
1634
branch,
d6e0d5b8 Andy McCall 25 days ago ↶
1635
claim,
75167672 Andy McCall 1 month ago
1636
} ,
d6e0d5b8 Andy McCall 25 days ago ↶
1637
} => sync:: git_import( & git_dir, & dest, & branch, claim) ,
62794ecc Andy McCall 1 month ago ↶
1638
Cmd:: Git {
7eac74ab Andy McCall 1 month ago ↶
1639
cmd:
1640
GitCmd:: Verify {
1641
git_dir,
1642
branch,
1643
last,
8b7986dd Andy McCall 26 days ago ↶
1644
max_differences,
7eac74ab Andy McCall 1 month ago ↶
1645
} ,
8b7986dd Andy McCall 26 days ago ↶
1646
} => sync:: git_verify( & git_dir, & branch, last, max_differences) ,
83e0677b Andy McCall 1 month ago ↶
1647
Cmd:: Policy { cmd } => match cmd {
1648
PolicyCmd:: Init => identity:: policy_init( ) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1649
PolicyCmd:: Show { json } => identity:: policy_show( json) ,
75167672 Andy McCall 1 month ago
1650
PolicyCmd:: Grant {
1651
identity_file,
1652
pattern,
1653
out,
1654
} => identity:: policy_grant( & identity_file, pattern.as_deref ( ) , out) ,
3a6effc7 Andy McCall 18 days ago ↶
1655
PolicyCmd:: GrantSubject {
1656
subject,
1657
issuer,
1658
scope,
1659
pattern,
1660
out,
1661
} => identity:: policy_grant_subject( & subject, & issuer, & scope, pattern.as_deref ( ) , out) ,
28fc23d7 Andy McCall 1 month ago ↶
1662
PolicyCmd:: Revoke { key, out } => identity:: policy_revoke( & key, out) ,
1663
PolicyCmd:: Root { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1664
RootCmd:: Add { identity_file, out } => {
1665
identity:: policy_root_add( & identity_file, out)
1666
}
28fc23d7 Andy McCall 1 month ago ↶
1667
RootCmd:: Remove { key, out } => identity:: policy_root_remove( & key, out) ,
1668
RootCmd:: Threshold { n, out } => identity:: policy_threshold( n, out) ,
1669
} ,
1670
PolicyCmd:: Sign { proposal, out } => identity:: policy_sign( & proposal, out) ,
fce44ae9 Andy McCall 1 month ago ↶
1671
} ,
4213c41d Andy McCall 1 month ago ↶
1672
Cmd:: Seal {
b582948f Andy McCall 19 days ago ↶
1673
flow: Some ( url) ,
1674
job: Some ( job) ,
1675
reject,
1676
json,
1677
..
1678
} => approve:: seal( & url, & job, reject, json) ,
1679
Cmd:: Seal {
4213c41d Andy McCall 1 month ago ↶
1680
changes,
1681
proposal: Some ( url) ,
1682
json,
b582948f Andy McCall 19 days ago ↶
1683
..
4213c41d Andy McCall 1 month ago ↶
1684
} if changes.is_empty ( ) => proposal:: seal( & url, json) ,
d82e4409 Andy McCall 1 month ago ↶
1685
Cmd:: Seal { changes, json, .. } => identity:: seal( & changes, json) ,
1686
Cmd:: Proposal { cmd } => match cmd {
1687
ProposalCmd:: Show { url, json } => proposal:: show( & url, json) ,
1688
ProposalCmd:: Land { url, force } => proposal:: land( & url, force) ,
1689
} ,
2c9ddac3 Andy McCall 1 month ago ↶
1690
Cmd:: Verify {
1691
change,
1692
revset,
1693
json,
1694
} => identity:: verify( change.as_deref ( ) , revset.as_deref ( ) , json) ,
614f55e1 Andy McCall 1 month ago ↶
1695
Cmd:: Config {
1696
key,
1697
value,
1698
user,
1699
unset,
1700
} => identity:: config( & key, value.as_deref ( ) .unwrap_or ( " " ) , user, unset) ,
fce44ae9 Andy McCall 1 month ago ↶
1701
}
1702
}
d42369ab Andy McCall 1 month ago
1703
1704
# [ cfg ( test ) ]
1705
mod help_tests {
1706
use super :: Cli;
1707
use clap:: CommandFactory;
1708
1709
1710
1711
# [ test ]
1712
fn every_command_and_argument_has_help ( ) {
1713
fn walk ( cmd : & clap:: Command, path : & str , missing : & mut Vec< String> ) {
1714
let here = format! ( " {path} {} " , cmd.get_name ( ) ) .trim ( ) .to_string ( ) ;
99e3e0af Andy McCall 1 month ago ↶
1715
if cmd.get_about ( ) .is_none ( ) & & ! path.is_empty ( ) {
d42369ab Andy McCall 1 month ago
1716
missing.push ( format! ( " {here} (command)" ) ) ;
1717
}
1718
for a in cmd.get_arguments ( ) {
1719
let id = a.get_id ( ) .as_str ( ) ;
99e3e0af Andy McCall 1 month ago ↶
1720
if id = = " help" | | id = = " version" | | ( a.is_global_set ( ) & & ! path.is_empty ( ) ) {
d42369ab Andy McCall 1 month ago
1721
continue ;
1722
}
1723
if a.get_help ( ) .is_none ( ) & & a.get_long_help ( ) .is_none ( ) {
1724
missing.push ( format! ( " {here} {id} " ) ) ;
1725
}
1726
}
1727
for sub in cmd.get_subcommands ( ) {
1728
walk ( sub, & here, missing) ;
1729
}
1730
}
1731
let mut missing = Vec :: new( ) ;
1732
walk ( & Cli:: command( ) , " " , & mut missing) ;
1733
assert! (
1734
missing.is_empty ( ) ,
1735
" {} without help:\n {}" ,
1736
missing.len ( ) ,
1737
missing.join ( " \n " )
1738
) ;
1739
}
1740
}