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