fce44ae9 Andy McCall 1 month ago ↶
1
2
ff1f62fe Andy McCall 1 month ago ↶
3
mod auth ;
fce44ae9 Andy McCall 1 month ago ↶
4
mod format ;
75167672 Andy McCall 1 month ago
5
mod identity ;
c6aa5bd9 Andy McCall 1 month ago ↶
6
mod json ;
d82e4409 Andy McCall 1 month ago ↶
7
mod proposal ;
fc1a466a Andy McCall 1 month ago ↶
8
mod receipt ;
fce44ae9 Andy McCall 1 month ago ↶
9
mod sync ;
135212de Andy McCall 1 month ago ↶
10
pub mod ui ;
fce44ae9 Andy McCall 1 month ago ↶
11
mod workspace ;
12
13
use anyhow:: { Context, Result } ;
14
use clap:: { Parser, Subcommand} ;
15
use oxy_core:: repo:: Repo;
16
use std:: path:: PathBuf;
17
18
# [ derive ( Parser ) ]
75167672 Andy McCall 1 month ago
19
# [ command (
20
name = " oxy" ,
21
version,
22
about = " Oxygen: breathing fresh air into version control"
23
) ]
fce44ae9 Andy McCall 1 month ago ↶
24
struct Cli {
135212de Andy McCall 1 month ago ↶
25
26
#[arg(long, global = true)]
27
plain : bool ,
98a1620a Andy McCall 1 month ago ↶
28
29
#[arg(long, global = true, value_name = "OP")]
30
at_op : Option< String> ,
fce44ae9 Andy McCall 1 month ago ↶
31
#[command(subcommand)]
32
cmd : Cmd,
33
}
34
98a1620a Andy McCall 1 month ago ↶
35
36
static AT_OP : std:: sync:: OnceLock< Option< String> > = std:: sync:: OnceLock:: new( ) ;
37
fce44ae9 Andy McCall 1 month ago ↶
38
# [ derive ( Subcommand ) ]
39
enum Cmd {
40
e02bf0cd Andy McCall 1 month ago ↶
41
Init {
d42369ab Andy McCall 1 month ago
42
e02bf0cd Andy McCall 1 month ago ↶
43
path: Option< PathBuf> ,
44
45
# [ arg ( long ) ]
46
bare: bool ,
47
} ,
fce44ae9 Andy McCall 1 month ago ↶
48
b3c5a59a Andy McCall 1 month ago ↶
49
Clone {
d42369ab Andy McCall 1 month ago
50
b3c5a59a Andy McCall 1 month ago ↶
51
url: String ,
d42369ab Andy McCall 1 month ago
52
b3c5a59a Andy McCall 1 month ago ↶
53
dest: Option< PathBuf> ,
54
55
# [ arg ( long ) ]
56
max_blob: Option< String> ,
7421309f Andy McCall 1 month ago ↶
57
58
# [ arg ( long = " sparse" ) ]
59
sparse: Vec< String> ,
2863456a Andy McCall 1 month ago ↶
60
61
# [ arg ( long ) ]
62
depth: Option< u32 > ,
14edbaaf Andy McCall 1 month ago ↶
63
64
# [ arg ( long ) ]
65
recursive: bool ,
b3c5a59a Andy McCall 1 month ago ↶
66
} ,
2863456a Andy McCall 1 month ago ↶
67
68
Deepen {
d42369ab Andy McCall 1 month ago
69
2863456a Andy McCall 1 month ago ↶
70
# [ arg ( default_value_t = 10 ) ]
71
depth: u32 ,
d42369ab Andy McCall 1 month ago
72
2863456a Andy McCall 1 month ago ↶
73
# [ arg ( long, default_value = " origin" ) ]
74
remote: String ,
75
} ,
7421309f Andy McCall 1 month ago ↶
76
d42369ab Andy McCall 1 month ago
77
Sparse {
78
79
paths: Vec< String> ,
80
} ,
fce44ae9 Andy McCall 1 month ago ↶
81
50a046e4 Andy McCall 1 month ago ↶
82
Status {
83
84
# [ arg ( long ) ]
85
json: bool ,
86
} ,
135212de Andy McCall 1 month ago ↶
87
88
Prompt {
694805cc Andy McCall 1 month ago ↶
89
135212de Andy McCall 1 month ago ↶
90
# [ arg ( long, default_value = oxy_core::repo::DEFAULT_PROMPT_FORMAT ) ]
91
format: String ,
694805cc Andy McCall 1 month ago ↶
92
93
# [ arg ( long ) ]
94
glyphs: bool ,
95
96
# [ arg ( long, value_parser = [" raw" , " bash" , " zsh" ] ) ]
97
color: Option< String> ,
135212de Andy McCall 1 month ago ↶
98
} ,
fce44ae9 Andy McCall 1 month ago ↶
99
100
Commit {
d42369ab Andy McCall 1 month ago
101
6a81dbab Andy McCall 1 month ago ↶
102
# [ arg ( short, long, required_unless_present = " file" , conflicts_with = " file" ) ]
103
message: Option< String> ,
104
105
# [ arg ( short = 'F', long, value_name = " FILE" ) ]
106
file: Option< PathBuf> ,
fce44ae9 Andy McCall 1 month ago ↶
107
108
# [ arg ( long = " depends-on" ) ]
109
depends_on: Vec< String> ,
957fee30 Andy McCall 1 month ago ↶
110
111
paths: Vec< String> ,
112
113
# [ arg ( short, long ) ]
114
interactive: bool ,
c6aa5bd9 Andy McCall 1 month ago ↶
115
116
# [ arg ( long, value_delimiter = ', ' ) ]
117
hunks: Vec< usize > ,
fce44ae9 Andy McCall 1 month ago ↶
118
} ,
728da0f9 Andy McCall 1 month ago ↶
119
120
Squash {
d42369ab Andy McCall 1 month ago
121
728da0f9 Andy McCall 1 month ago ↶
122
change: String ,
d42369ab Andy McCall 1 month ago
123
728da0f9 Andy McCall 1 month ago ↶
124
# [ arg ( long ) ]
125
into: String ,
126
} ,
127
128
Rebase {
d42369ab Andy McCall 1 month ago
129
728da0f9 Andy McCall 1 month ago ↶
130
change: String ,
131
132
# [ arg ( long, required = true, num_args = 1.. ) ]
133
onto: Vec< String> ,
e266b7d4 Andy McCall 1 month ago ↶
134
135
136
137
# [ arg ( long ) ]
138
into_working_copy: bool ,
728da0f9 Andy McCall 1 month ago ↶
139
} ,
957fee30 Andy McCall 1 month ago ↶
140
141
Blame {
d42369ab Andy McCall 1 month ago
142
957fee30 Andy McCall 1 month ago ↶
143
path: String ,
d42369ab Andy McCall 1 month ago
144
957fee30 Andy McCall 1 month ago ↶
145
# [ arg ( long ) ]
146
json: bool ,
147
} ,
148
149
Bisect {
150
# [ command ( subcommand ) ]
151
cmd: BisectCmd,
152
} ,
fce44ae9 Andy McCall 1 month ago ↶
153
94084087 Andy McCall 1 month ago ↶
154
Log {
155
156
# [ arg ( short = 'n', long ) ]
157
limit: Option< usize > ,
158
159
# [ arg ( short, long ) ]
160
verbose: bool ,
c6aa5bd9 Andy McCall 1 month ago ↶
161
162
# [ arg ( long ) ]
163
path: Option< String> ,
83d61e80 Andy McCall 1 month ago ↶
164
165
166
167
# [ arg ( short = 'L', value_name = " START,END:PATH" , conflicts_with = " path" ) ]
168
lines: Option< String> ,
d42369ab Andy McCall 1 month ago
169
c6aa5bd9 Andy McCall 1 month ago ↶
170
# [ arg ( long ) ]
171
json: bool ,
94084087 Andy McCall 1 month ago ↶
172
} ,
fce44ae9 Andy McCall 1 month ago ↶
173
c6aa5bd9 Andy McCall 1 month ago ↶
174
Diff {
175
176
change: Option< String> ,
d42369ab Andy McCall 1 month ago
177
c6aa5bd9 Andy McCall 1 month ago ↶
178
# [ arg ( long ) ]
179
json: bool ,
180
} ,
181
182
Cat {
d42369ab Andy McCall 1 month ago
183
c6aa5bd9 Andy McCall 1 month ago ↶
184
path: String ,
185
186
# [ arg ( short = 'r', long ) ]
187
change: Option< String> ,
188
} ,
189
190
Root {
d42369ab Andy McCall 1 month ago
191
c6aa5bd9 Andy McCall 1 month ago ↶
192
# [ arg ( long ) ]
193
json: bool ,
194
} ,
195
196
Version {
d42369ab Andy McCall 1 month ago
197
c6aa5bd9 Andy McCall 1 month ago ↶
198
# [ arg ( long ) ]
199
json: bool ,
200
} ,
201
202
Discard {
d42369ab Andy McCall 1 month ago
203
c6aa5bd9 Andy McCall 1 month ago ↶
204
paths: Vec< String> ,
205
206
# [ arg ( long, value_delimiter = ', ' ) ]
207
hunks: Vec< usize > ,
208
} ,
209
210
Hunks {
d42369ab Andy McCall 1 month ago
211
c6aa5bd9 Andy McCall 1 month ago ↶
212
# [ arg ( long ) ]
213
json: bool ,
214
} ,
6a81dbab Andy McCall 1 month ago ↶
215
216
217
614541c3 Andy McCall 1 month ago ↶
218
Describe {
d42369ab Andy McCall 1 month ago
219
614541c3 Andy McCall 1 month ago ↶
220
# [ arg ( short, long ) ]
6a81dbab Andy McCall 1 month ago ↶
221
message: Option< String> ,
d42369ab Andy McCall 1 month ago
222
614541c3 Andy McCall 1 month ago ↶
223
change: Option< String> ,
6a81dbab Andy McCall 1 month ago ↶
224
225
# [ arg ( long, conflicts_with = " message" ) ]
226
json: bool ,
614541c3 Andy McCall 1 month ago ↶
227
} ,
23b217d7 Andy McCall 1 month ago ↶
228
614541c3 Andy McCall 1 month ago ↶
229
Amend {
d42369ab Andy McCall 1 month ago
230
614541c3 Andy McCall 1 month ago ↶
231
# [ arg ( short, long ) ]
232
message: Option< String> ,
23b217d7 Andy McCall 1 month ago ↶
233
234
# [ arg ( long ) ]
235
into: Option< String> ,
614541c3 Andy McCall 1 month ago ↶
236
} ,
23b217d7 Andy McCall 1 month ago ↶
237
d42369ab Andy McCall 1 month ago
238
Split {
239
240
change: String ,
241
242
paths: Vec< String> ,
243
} ,
614541c3 Andy McCall 1 month ago ↶
244
d42369ab Andy McCall 1 month ago
245
Abandon {
246
247
change: String ,
248
} ,
fce44ae9 Andy McCall 1 month ago ↶
249
c6aa5bd9 Andy McCall 1 month ago ↶
250
Show {
d42369ab Andy McCall 1 month ago
251
c6aa5bd9 Andy McCall 1 month ago ↶
252
change: String ,
d42369ab Andy McCall 1 month ago
253
c6aa5bd9 Andy McCall 1 month ago ↶
254
# [ arg ( long ) ]
255
json: bool ,
256
} ,
fce44ae9 Andy McCall 1 month ago ↶
257
258
Checkout {
d42369ab Andy McCall 1 month ago
259
fce44ae9 Andy McCall 1 month ago ↶
260
changes: Vec< String> ,
261
262
# [ arg ( long ) ]
263
discard: bool ,
1c2bd9ab Andy McCall 1 month ago ↶
264
265
266
# [ arg ( long, conflicts_with = " discard" ) ]
267
carry: bool ,
fce44ae9 Andy McCall 1 month ago ↶
268
} ,
269
c6aa5bd9 Andy McCall 1 month ago ↶
270
Resolve {
d42369ab Andy McCall 1 month ago
271
c6aa5bd9 Andy McCall 1 month ago ↶
272
# [ arg ( long ) ]
273
json: bool ,
274
} ,
fce44ae9 Andy McCall 1 month ago ↶
275
276
Undo,
252e8cb2 Andy McCall 1 month ago ↶
277
278
Checkpoint,
d42369ab Andy McCall 1 month ago
279
280
Completions {
281
282
shell: clap_complete:: Shell,
283
} ,
284
285
Man {
286
287
# [ arg ( long ) ]
288
dir: Option< PathBuf> ,
289
} ,
3e5772cc Andy McCall 1 month ago ↶
290
291
Doctor {
292
293
# [ arg ( long ) ]
294
offline: bool ,
d42369ab Andy McCall 1 month ago
295
3e5772cc Andy McCall 1 month ago ↶
296
# [ arg ( long ) ]
297
json: bool ,
298
} ,
387335ff Andy McCall 1 month ago ↶
299
300
Fsck {
d42369ab Andy McCall 1 month ago
301
387335ff Andy McCall 1 month ago ↶
302
# [ arg ( long ) ]
303
json: bool ,
304
} ,
da652d63 Andy McCall 1 month ago ↶
305
ba160f60 Andy McCall 1 month ago ↶
306
Gc {
307
308
# [ arg ( long ) ]
309
now: bool ,
310
} ,
fce44ae9 Andy McCall 1 month ago ↶
311
312
# [ command ( name = " op" ) ]
313
Op {
314
# [ command ( subcommand ) ]
315
cmd: OpCmd,
316
} ,
cdb5beba Andy McCall 1 month ago ↶
317
d42369ab Andy McCall 1 month ago
318
Lock {
319
320
path: String ,
321
} ,
cdb5beba Andy McCall 1 month ago ↶
322
d42369ab Andy McCall 1 month ago
323
Unlock {
324
325
path: String ,
326
} ,
4e88e774 Andy McCall 1 month ago ↶
327
328
Workspace {
329
# [ command ( subcommand ) ]
330
cmd: WorkspaceCmd,
331
} ,
7b9809e6 Andy McCall 1 month ago ↶
332
333
Bookmark {
334
# [ command ( subcommand ) ]
335
cmd: BookmarkCmd,
336
} ,
337
d42369ab Andy McCall 1 month ago
338
Merge {
339
340
bookmark: String ,
341
} ,
ff1f62fe Andy McCall 1 month ago ↶
342
343
Auth {
344
# [ command ( subcommand ) ]
345
cmd: AuthCmd,
346
} ,
4dee277c Andy McCall 1 month ago ↶
347
348
Submodule {
349
# [ command ( subcommand ) ]
350
cmd: SubmoduleCmd,
351
} ,
fc1a466a Andy McCall 1 month ago ↶
352
353
Receipt {
354
# [ command ( subcommand ) ]
355
cmd: ReceiptCmd,
356
} ,
132b884b Andy McCall 1 month ago ↶
357
358
Tag {
359
# [ command ( subcommand ) ]
360
cmd: TagCmd,
361
} ,
fce44ae9 Andy McCall 1 month ago ↶
362
363
Remote {
364
# [ command ( subcommand ) ]
365
cmd: RemoteCmd,
366
} ,
367
c6aa5bd9 Andy McCall 1 month ago ↶
368
Fetch {
d42369ab Andy McCall 1 month ago
369
c6aa5bd9 Andy McCall 1 month ago ↶
370
remote: Option< String> ,
d42369ab Andy McCall 1 month ago
371
c6aa5bd9 Andy McCall 1 month ago ↶
372
# [ arg ( long ) ]
373
json: bool ,
374
} ,
fce44ae9 Andy McCall 1 month ago ↶
375
c6aa5bd9 Andy McCall 1 month ago ↶
376
Pull {
d42369ab Andy McCall 1 month ago
377
c6aa5bd9 Andy McCall 1 month ago ↶
378
remote: Option< String> ,
d42369ab Andy McCall 1 month ago
379
c6aa5bd9 Andy McCall 1 month ago ↶
380
# [ arg ( long ) ]
381
json: bool ,
382
} ,
fce44ae9 Andy McCall 1 month ago ↶
383
384
Push {
d42369ab Andy McCall 1 month ago
385
fce44ae9 Andy McCall 1 month ago ↶
386
remote: Option< String> ,
387
388
# [ arg ( long ) ]
389
force: bool ,
7b9809e6 Andy McCall 1 month ago ↶
390
391
# [ arg ( short = 'b', long ) ]
392
bookmark: Option< String> ,
f8c69576 Andy McCall 1 month ago ↶
393
394
395
# [ arg ( long, value_name = " NAME" , conflicts_with_all = [" bookmark" , " force" ] ) ]
396
delete: Option< String> ,
d42369ab Andy McCall 1 month ago
397
c6aa5bd9 Andy McCall 1 month ago ↶
398
# [ arg ( long ) ]
399
json: bool ,
fce44ae9 Andy McCall 1 month ago ↶
400
} ,
2b5ee371 Andy McCall 1 month ago ↶
401
fce44ae9 Andy McCall 1 month ago ↶
402
Serve {
403
404
# [ arg ( long, default_value = " ." ) ]
405
root: PathBuf,
d42369ab Andy McCall 1 month ago
406
fce44ae9 Andy McCall 1 month ago ↶
407
# [ arg ( long, default_value = " 127.0.0.1:8890" ) ]
408
bind: String ,
409
410
# [ arg ( long = " token" ) ]
411
tokens: Vec< String> ,
2b5ee371 Andy McCall 1 month ago ↶
412
413
# [ arg ( long, requires = " tls_key" ) ]
414
tls_cert: Option< PathBuf> ,
415
416
# [ arg ( long, requires = " tls_cert" ) ]
417
tls_key: Option< PathBuf> ,
fce44ae9 Andy McCall 1 month ago ↶
418
} ,
419
420
Identity {
421
# [ command ( subcommand ) ]
422
cmd: IdentityCmd,
423
} ,
05e71ed6 Andy McCall 1 month ago ↶
424
425
Seal {
d42369ab Andy McCall 1 month ago
426
05e71ed6 Andy McCall 1 month ago ↶
427
changes: Vec< String> ,
d82e4409 Andy McCall 1 month ago ↶
428
429
# [ arg ( long, conflicts_with = " changes" ) ]
430
proposal: Option< String> ,
d42369ab Andy McCall 1 month ago
431
05e71ed6 Andy McCall 1 month ago ↶
432
# [ arg ( long ) ]
433
json: bool ,
434
} ,
d82e4409 Andy McCall 1 month ago ↶
435
436
Proposal {
437
# [ command ( subcommand ) ]
438
cmd: ProposalCmd,
439
} ,
fce44ae9 Andy McCall 1 month ago ↶
440
c6aa5bd9 Andy McCall 1 month ago ↶
441
Verify {
d42369ab Andy McCall 1 month ago
442
c6aa5bd9 Andy McCall 1 month ago ↶
443
change: Option< String> ,
d42369ab Andy McCall 1 month ago
444
c6aa5bd9 Andy McCall 1 month ago ↶
445
# [ arg ( long ) ]
446
json: bool ,
447
} ,
79ab8528 Andy McCall 1 month ago ↶
448
449
Git {
450
# [ command ( subcommand ) ]
451
cmd: GitCmd,
452
} ,
83e0677b Andy McCall 1 month ago ↶
453
454
Policy {
455
# [ command ( subcommand ) ]
456
cmd: PolicyCmd,
457
} ,
ff1f62fe Andy McCall 1 month ago ↶
458
fce44ae9 Andy McCall 1 month ago ↶
459
Config {
d42369ab Andy McCall 1 month ago
460
fce44ae9 Andy McCall 1 month ago ↶
461
key: String ,
d42369ab Andy McCall 1 month ago
462
fce44ae9 Andy McCall 1 month ago ↶
463
value: String ,
464
465
# [ arg ( long ) ]
466
user: bool ,
467
} ,
468
}
469
470
# [ derive ( Subcommand ) ]
471
enum OpCmd {
98a1620a Andy McCall 1 month ago ↶
472
c6aa5bd9 Andy McCall 1 month ago ↶
473
Log {
98a1620a Andy McCall 1 month ago ↶
474
475
# [ arg ( short = 'n', long ) ]
476
limit: Option< usize > ,
d42369ab Andy McCall 1 month ago
477
c6aa5bd9 Andy McCall 1 month ago ↶
478
# [ arg ( long ) ]
479
json: bool ,
98a1620a Andy McCall 1 month ago ↶
480
} ,
481
482
Restore {
483
484
op: String ,
485
486
# [ arg ( long ) ]
487
discard: bool ,
488
} ,
489
490
Revert {
491
492
op: String ,
c6aa5bd9 Andy McCall 1 month ago ↶
493
} ,
fce44ae9 Andy McCall 1 month ago ↶
494
}
495
496
# [ derive ( Subcommand ) ]
4e88e774 Andy McCall 1 month ago ↶
497
enum WorkspaceCmd {
498
d42369ab Andy McCall 1 month ago
499
Add {
500
501
path: PathBuf,
502
503
changes: Vec< String> ,
504
} ,
505
1196b29b Andy McCall 1 month ago ↶
506
List {
d42369ab Andy McCall 1 month ago
507
1196b29b Andy McCall 1 month ago ↶
508
# [ arg ( long ) ]
509
json: bool ,
510
} ,
4e88e774 Andy McCall 1 month ago ↶
511
d42369ab Andy McCall 1 month ago
512
Forget {
513
514
workspace: String ,
515
} ,
4e88e774 Andy McCall 1 month ago ↶
516
}
517
518
# [ derive ( Subcommand ) ]
957fee30 Andy McCall 1 month ago ↶
519
enum BisectCmd {
520
521
Start,
522
d42369ab Andy McCall 1 month ago
523
Good {
524
525
changes: Vec< String> ,
526
} ,
957fee30 Andy McCall 1 month ago ↶
527
d42369ab Andy McCall 1 month ago
528
Bad {
529
530
changes: Vec< String> ,
531
} ,
957fee30 Andy McCall 1 month ago ↶
532
533
Skip,
534
535
Run {
d42369ab Andy McCall 1 month ago
536
957fee30 Andy McCall 1 month ago ↶
537
# [ arg ( required = true, trailing_var_arg = true ) ]
538
command: Vec< String> ,
539
} ,
540
c6aa5bd9 Andy McCall 1 month ago ↶
541
Status {
d42369ab Andy McCall 1 month ago
542
c6aa5bd9 Andy McCall 1 month ago ↶
543
# [ arg ( long ) ]
544
json: bool ,
545
} ,
957fee30 Andy McCall 1 month ago ↶
546
547
Reset,
548
}
549
550
# [ derive ( Subcommand ) ]
7b9809e6 Andy McCall 1 month ago ↶
551
enum BookmarkCmd {
552
d42369ab Andy McCall 1 month ago
553
Create {
554
555
name: String ,
4fe7d604 Andy McCall 1 month ago ↶
556
557
558
559
d42369ab Andy McCall 1 month ago
560
changes: Vec< String> ,
4fe7d604 Andy McCall 1 month ago ↶
561
562
563
# [ arg ( long, conflicts_with = " only" ) ]
564
upto: bool ,
565
566
# [ arg ( long ) ]
567
only: bool ,
d42369ab Andy McCall 1 month ago
568
} ,
7b9809e6 Andy McCall 1 month ago ↶
569
d42369ab Andy McCall 1 month ago
570
Set {
571
572
name: String ,
06d16dc2 Andy McCall 1 month ago ↶
573
574
575
d42369ab Andy McCall 1 month ago
576
changes: Vec< String> ,
06d16dc2 Andy McCall 1 month ago ↶
577
578
579
# [ arg ( long, conflicts_with = " only" ) ]
580
upto: bool ,
581
582
# [ arg ( long ) ]
583
only: bool ,
d42369ab Andy McCall 1 month ago
584
} ,
7b9809e6 Andy McCall 1 month ago ↶
585
d42369ab Andy McCall 1 month ago
586
Delete {
587
588
name: String ,
589
} ,
7b9809e6 Andy McCall 1 month ago ↶
590
c6aa5bd9 Andy McCall 1 month ago ↶
591
List {
14edbaaf Andy McCall 1 month ago ↶
592
593
# [ arg ( long, short ) ]
594
all: bool ,
d42369ab Andy McCall 1 month ago
595
c6aa5bd9 Andy McCall 1 month ago ↶
596
# [ arg ( long ) ]
597
json: bool ,
598
} ,
61e3bce7 Andy McCall 1 month ago ↶
599
7b9809e6 Andy McCall 1 month ago ↶
600
Switch {
14edbaaf Andy McCall 1 month ago ↶
601
7b9809e6 Andy McCall 1 month ago ↶
602
name: String ,
603
604
# [ arg ( long ) ]
605
discard: bool ,
61e3bce7 Andy McCall 1 month ago ↶
606
607
608
# [ arg ( long, conflicts_with = " discard" ) ]
609
carry: bool ,
ff1f62fe Andy McCall 1 month ago ↶
610
} ,
611
}
612
613
# [ derive ( Subcommand ) ]
614
enum AuthCmd {
615
616
617
Login {
618
619
hub: Option< String> ,
620
621
# [ arg ( long ) ]
622
with_token: bool ,
623
624
# [ arg ( long ) ]
625
ca: Option< PathBuf> ,
7b9809e6 Andy McCall 1 month ago ↶
626
} ,
ff1f62fe Andy McCall 1 month ago ↶
627
628
Status,
629
630
Logout {
631
632
hub: Option< String> ,
633
} ,
7b9809e6 Andy McCall 1 month ago ↶
634
}
635
636
# [ derive ( Subcommand ) ]
4dee277c Andy McCall 1 month ago ↶
637
enum SubmoduleCmd {
638
639
Add {
d42369ab Andy McCall 1 month ago
640
4dee277c Andy McCall 1 month ago ↶
641
url: String ,
d42369ab Andy McCall 1 month ago
642
4dee277c Andy McCall 1 month ago ↶
643
path: String ,
644
645
# [ arg ( long ) ]
646
bookmark: Option< String> ,
647
} ,
648
649
Update {
650
651
# [ arg ( long ) ]
652
init: bool ,
d42369ab Andy McCall 1 month ago
653
4dee277c Andy McCall 1 month ago ↶
654
paths: Vec< String> ,
655
} ,
656
c6aa5bd9 Andy McCall 1 month ago ↶
657
Status {
d42369ab Andy McCall 1 month ago
658
c6aa5bd9 Andy McCall 1 month ago ↶
659
# [ arg ( long ) ]
660
json: bool ,
661
} ,
4dee277c Andy McCall 1 month ago ↶
662
d42369ab Andy McCall 1 month ago
663
Remove {
664
665
path: String ,
666
} ,
4dee277c Andy McCall 1 month ago ↶
667
}
668
669
# [ derive ( Subcommand ) ]
fc1a466a Andy McCall 1 month ago ↶
670
enum ReceiptCmd {
671
672
List {
673
674
rev: Option< String> ,
675
676
# [ arg ( long ) ]
677
json: bool ,
678
} ,
679
680
Show {
681
682
receipt: String ,
683
684
# [ arg ( long ) ]
685
rev: Option< String> ,
686
687
# [ arg ( long ) ]
688
json: bool ,
689
} ,
690
691
Export {
692
693
receipt: String ,
694
695
file: String ,
696
697
# [ arg ( long ) ]
698
rev: Option< String> ,
699
} ,
700
701
Verify {
702
703
file: String ,
704
705
# [ arg ( long ) ]
706
json: bool ,
707
} ,
708
709
Import {
710
711
file: String ,
712
} ,
713
}
714
715
# [ derive ( Subcommand ) ]
132b884b Andy McCall 1 month ago ↶
716
enum TagCmd {
717
718
Create {
d42369ab Andy McCall 1 month ago
719
132b884b Andy McCall 1 month ago ↶
720
name: String ,
d42369ab Andy McCall 1 month ago
721
132b884b Andy McCall 1 month ago ↶
722
changes: Vec< String> ,
d42369ab Andy McCall 1 month ago
723
132b884b Andy McCall 1 month ago ↶
724
# [ arg ( short, long, default_value = " " ) ]
725
message: String ,
726
} ,
d42369ab Andy McCall 1 month ago
727
1196b29b Andy McCall 1 month ago ↶
728
List {
d42369ab Andy McCall 1 month ago
729
1196b29b Andy McCall 1 month ago ↶
730
# [ arg ( long ) ]
731
json: bool ,
732
} ,
132b884b Andy McCall 1 month ago ↶
733
}
734
735
# [ derive ( Subcommand ) ]
fce44ae9 Andy McCall 1 month ago ↶
736
enum RemoteCmd {
d42369ab Andy McCall 1 month ago
737
75167672 Andy McCall 1 month ago
738
Add {
d42369ab Andy McCall 1 month ago
739
75167672 Andy McCall 1 month ago
740
name: String ,
9aa39904 Andy McCall 1 month ago ↶
741
75167672 Andy McCall 1 month ago
742
url: String ,
9aa39904 Andy McCall 1 month ago ↶
743
744
# [ arg ( long ) ]
745
profile: Option< String> ,
746
747
# [ arg ( long ) ]
748
region: Option< String> ,
749
750
# [ arg ( long ) ]
751
endpoint: Option< String> ,
752
753
# [ arg ( long ) ]
754
credentials: Option< String> ,
75167672 Andy McCall 1 month ago
755
} ,
9aa39904 Andy McCall 1 month ago ↶
756
757
Check {
758
759
name: String ,
760
} ,
d42369ab Andy McCall 1 month ago
761
75167672 Andy McCall 1 month ago
762
Remove {
d42369ab Andy McCall 1 month ago
763
75167672 Andy McCall 1 month ago
764
name: String ,
765
} ,
d42369ab Andy McCall 1 month ago
766
c6aa5bd9 Andy McCall 1 month ago ↶
767
List {
d42369ab Andy McCall 1 month ago
768
c6aa5bd9 Andy McCall 1 month ago ↶
769
# [ arg ( long ) ]
770
json: bool ,
771
} ,
fce44ae9 Andy McCall 1 month ago ↶
772
}
773
774
# [ derive ( Subcommand ) ]
d82e4409 Andy McCall 1 month ago ↶
775
enum ProposalCmd {
776
777
Show {
d42369ab Andy McCall 1 month ago
778
d82e4409 Andy McCall 1 month ago ↶
779
url: String ,
d42369ab Andy McCall 1 month ago
780
d82e4409 Andy McCall 1 month ago ↶
781
# [ arg ( long ) ]
782
json: bool ,
783
} ,
784
785
Land {
d42369ab Andy McCall 1 month ago
786
d82e4409 Andy McCall 1 month ago ↶
787
url: String ,
788
789
# [ arg ( long ) ]
790
force: bool ,
791
} ,
792
}
793
794
# [ derive ( Subcommand ) ]
fce44ae9 Andy McCall 1 month ago ↶
795
enum IdentityCmd {
796
797
Create {
d42369ab Andy McCall 1 month ago
798
fce44ae9 Andy McCall 1 month ago ↶
799
# [ arg ( long ) ]
800
name: Option< String> ,
d42369ab Andy McCall 1 month ago
801
fce44ae9 Andy McCall 1 month ago ↶
802
# [ arg ( long ) ]
803
email: Option< String> ,
804
805
# [ arg ( long ) ]
806
local: bool ,
28fc23d7 Andy McCall 1 month ago ↶
807
808
# [ arg ( long ) ]
809
expires: Option< u64 > ,
fce44ae9 Andy McCall 1 month ago ↶
810
} ,
811
812
Show,
83e0677b Andy McCall 1 month ago ↶
813
d42369ab Andy McCall 1 month ago
814
Export {
e3d071ce Andy McCall 1 month ago ↶
815
d42369ab Andy McCall 1 month ago
816
path: Option< PathBuf> ,
817
} ,
7aa2dc93 Andy McCall 1 month ago ↶
818
819
SignChallenge {
d42369ab Andy McCall 1 month ago
820
7aa2dc93 Andy McCall 1 month ago ↶
821
challenge: String ,
d42369ab Andy McCall 1 month ago
822
7aa2dc93 Andy McCall 1 month ago ↶
823
# [ arg ( long ) ]
824
json: bool ,
825
} ,
28fc23d7 Andy McCall 1 month ago ↶
826
827
Rotate,
828
829
Renew {
d42369ab Andy McCall 1 month ago
830
28fc23d7 Andy McCall 1 month ago ↶
831
# [ arg ( long ) ]
832
expires: u64 ,
833
} ,
834
835
Revoke {
836
837
key: Option< String> ,
d42369ab Andy McCall 1 month ago
838
28fc23d7 Andy McCall 1 month ago ↶
839
# [ arg ( long, default_value = " " ) ]
840
reason: String ,
841
} ,
842
843
Delegate {
844
# [ command ( subcommand ) ]
845
cmd: DelegateCmd,
846
} ,
847
}
848
849
# [ derive ( Subcommand ) ]
850
enum DelegateCmd {
851
d42369ab Andy McCall 1 month ago
852
Add {
853
854
identity_file: PathBuf,
855
} ,
28fc23d7 Andy McCall 1 month ago ↶
856
d42369ab Andy McCall 1 month ago
857
Remove {
858
859
key: String ,
860
} ,
28fc23d7 Andy McCall 1 month ago ↶
861
862
List,
fce44ae9 Andy McCall 1 month ago ↶
863
}
864
83e0677b Andy McCall 1 month ago ↶
865
# [ derive ( Subcommand ) ]
79ab8528 Andy McCall 1 month ago ↶
866
enum GitCmd {
867
30ea9c1e Andy McCall 1 month ago ↶
868
Export {
d42369ab Andy McCall 1 month ago
869
30ea9c1e Andy McCall 1 month ago ↶
870
git_dir: PathBuf,
871
872
# [ arg ( long ) ]
873
branch: Option< String> ,
874
} ,
875
876
Fetch {
d42369ab Andy McCall 1 month ago
877
30ea9c1e Andy McCall 1 month ago ↶
878
url: String ,
d42369ab Andy McCall 1 month ago
879
30ea9c1e Andy McCall 1 month ago ↶
880
# [ arg ( long, default_value = " main" ) ]
881
branch: String ,
882
} ,
883
884
Push {
d42369ab Andy McCall 1 month ago
885
30ea9c1e Andy McCall 1 month ago ↶
886
url: String ,
d42369ab Andy McCall 1 month ago
887
30ea9c1e Andy McCall 1 month ago ↶
888
# [ arg ( long, default_value = " main" ) ]
889
branch: String ,
890
} ,
62794ecc Andy McCall 1 month ago ↶
891
892
Verify {
893
894
git_dir: PathBuf,
895
896
# [ arg ( long, default_value = " main" ) ]
897
branch: String ,
898
} ,
c3069537 Andy McCall 1 month ago ↶
899
900
Import {
d42369ab Andy McCall 1 month ago
901
c3069537 Andy McCall 1 month ago ↶
902
git_dir: PathBuf,
d42369ab Andy McCall 1 month ago
903
c3069537 Andy McCall 1 month ago ↶
904
dest: PathBuf,
d42369ab Andy McCall 1 month ago
905
c3069537 Andy McCall 1 month ago ↶
906
# [ arg ( long, default_value = " main" ) ]
907
branch: String ,
908
} ,
79ab8528 Andy McCall 1 month ago ↶
909
}
910
911
# [ derive ( Subcommand ) ]
83e0677b Andy McCall 1 month ago ↶
912
enum PolicyCmd {
913
914
Init,
915
c6aa5bd9 Andy McCall 1 month ago ↶
916
Show {
d42369ab Andy McCall 1 month ago
917
c6aa5bd9 Andy McCall 1 month ago ↶
918
# [ arg ( long ) ]
919
json: bool ,
920
} ,
83e0677b Andy McCall 1 month ago ↶
921
922
Grant {
d42369ab Andy McCall 1 month ago
923
83e0677b Andy McCall 1 month ago ↶
924
identity_file: PathBuf,
925
926
# [ arg ( long ) ]
927
pattern: Option< String> ,
28fc23d7 Andy McCall 1 month ago ↶
928
929
# [ arg ( long ) ]
930
out: Option< PathBuf> ,
83e0677b Andy McCall 1 month ago ↶
931
} ,
932
28fc23d7 Andy McCall 1 month ago ↶
933
Revoke {
d42369ab Andy McCall 1 month ago
934
28fc23d7 Andy McCall 1 month ago ↶
935
key: String ,
936
937
# [ arg ( long ) ]
938
out: Option< PathBuf> ,
939
} ,
940
941
Root {
942
# [ command ( subcommand ) ]
943
cmd: RootCmd,
944
} ,
945
946
Sign {
d42369ab Andy McCall 1 month ago
947
28fc23d7 Andy McCall 1 month ago ↶
948
proposal: PathBuf,
949
950
# [ arg ( long ) ]
951
out: Option< PathBuf> ,
952
} ,
953
}
954
955
# [ derive ( Subcommand ) ]
956
enum RootCmd {
957
958
Add {
d42369ab Andy McCall 1 month ago
959
28fc23d7 Andy McCall 1 month ago ↶
960
identity_file: PathBuf,
d42369ab Andy McCall 1 month ago
961
28fc23d7 Andy McCall 1 month ago ↶
962
# [ arg ( long ) ]
963
out: Option< PathBuf> ,
964
} ,
965
966
Remove {
d42369ab Andy McCall 1 month ago
967
28fc23d7 Andy McCall 1 month ago ↶
968
key: String ,
d42369ab Andy McCall 1 month ago
969
28fc23d7 Andy McCall 1 month ago ↶
970
# [ arg ( long ) ]
971
out: Option< PathBuf> ,
972
} ,
973
974
Threshold {
d42369ab Andy McCall 1 month ago
975
28fc23d7 Andy McCall 1 month ago ↶
976
n: u32 ,
d42369ab Andy McCall 1 month ago
977
28fc23d7 Andy McCall 1 month ago ↶
978
# [ arg ( long ) ]
979
out: Option< PathBuf> ,
980
} ,
83e0677b Andy McCall 1 month ago ↶
981
}
982
fce44ae9 Andy McCall 1 month ago ↶
983
984
fn open ( ) -> Result< Repo> {
98a1620a Andy McCall 1 month ago ↶
985
let repo = Repo:: open( & std:: env:: current_dir( ) ? ) .context ( " opening repository" ) ? ;
986
match AT_OP .get ( ) .and_then ( | o | o.as_deref ( ) ) {
987
Some ( op) => Ok ( repo.at_op ( op) ? ) ,
988
None => Ok ( repo) ,
989
}
fce44ae9 Andy McCall 1 month ago ↶
990
}
991
d42369ab Andy McCall 1 month ago
992
993
fn man ( dir : Option< PathBuf> ) -> Result< i32 > {
994
use clap:: CommandFactory;
995
let cmd = Cli:: command( ) ;
996
match dir {
997
Some ( dir) => {
998
std:: fs:: create_dir_all( & dir) ? ;
999
clap_mangen:: generate_to( cmd, & dir) ? ;
1000
let pages = std:: fs:: read_dir( & dir) ?
1001
.filter ( | e | {
1002
e.as_ref ( )
1003
.is_ok_and ( | e | e.path ( ) .extension ( ) .is_some_and ( | x | x = = " 1" ) )
1004
} )
1005
.count ( ) ;
1006
println! (
1007
" {} " ,
1008
ui:: done( format! ( " Wrote {pages} man pages to {} " , dir.display ( ) ) )
1009
) ;
1010
}
1011
None => clap_mangen:: Man:: new( cmd) .render ( & mut std:: io:: stdout( ) ) ? ,
1012
}
1013
Ok ( 0 )
1014
}
1015
fce44ae9 Andy McCall 1 month ago ↶
1016
1017
pub fn run ( ) -> Result< i32 > {
1018
let cli = Cli:: parse( ) ;
135212de Andy McCall 1 month ago ↶
1019
ui:: init( cli.plain) ;
98a1620a Andy McCall 1 month ago ↶
1020
AT_OP .set ( cli.at_op.clone ( ) ) .ok ( ) ;
fce44ae9 Andy McCall 1 month ago ↶
1021
match cli.cmd {
d42369ab Andy McCall 1 month ago
1022
Cmd:: Completions { shell } => {
1023
use clap:: CommandFactory;
1024
clap_complete:: generate( shell, & mut Cli:: command( ) , " oxy" , & mut std:: io:: stdout( ) ) ;
1025
Ok ( 0 )
1026
}
1027
Cmd:: Man { dir } => man ( dir) ,
e02bf0cd Andy McCall 1 month ago ↶
1028
Cmd:: Init { path, bare } => workspace:: init( path, bare) ,
50a046e4 Andy McCall 1 month ago ↶
1029
Cmd:: Status { json } => workspace:: status( json) ,
75167672 Andy McCall 1 month ago
1030
Cmd:: Prompt {
1031
format,
1032
glyphs,
1033
color,
1034
} => workspace:: prompt( & format, glyphs, color.as_deref ( ) ) ,
1035
Cmd:: Commit {
1036
message,
6a81dbab Andy McCall 1 month ago ↶
1037
file,
75167672 Andy McCall 1 month ago
1038
depends_on,
1039
paths,
1040
interactive,
1041
hunks,
6a81dbab Andy McCall 1 month ago ↶
1042
} => {
1043
let message = match ( message, file) {
1044
( Some ( m) , _ ) => m,
1045
( None , Some ( f) ) if f.as_os_str ( ) = = " -" => {
1046
let mut s = String :: new( ) ;
1047
std:: io:: Read:: read_to_string( & mut std:: io:: stdin( ) , & mut s) ? ;
1048
s
1049
}
1050
( None , Some ( f) ) => std:: fs:: read_to_string( & f) .map_err ( | e | {
1051
anyhow:: anyhow! ( " reading the message from {}: {e}" , f.display ( ) )
1052
} ) ? ,
1053
( None , None ) => anyhow:: bail! ( " a commit message is required (-m or -F)" ) ,
1054
} ;
1055
workspace:: commit( & message, & depends_on, & paths, interactive, & hunks)
1056
}
c6aa5bd9 Andy McCall 1 month ago ↶
1057
Cmd:: Cat { path, change } => workspace:: cat( & path, change.as_deref ( ) ) ,
1058
Cmd:: Root { json } => workspace:: root( json) ,
1059
Cmd:: Version { json } => workspace:: version( json) ,
1060
Cmd:: Discard { paths, hunks } => workspace:: discard( & paths, & hunks) ,
1061
Cmd:: Hunks { json } => workspace:: hunks( json) ,
728da0f9 Andy McCall 1 month ago ↶
1062
Cmd:: Squash { change, into } => workspace:: squash( & change, & into) ,
e266b7d4 Andy McCall 1 month ago ↶
1063
Cmd:: Rebase {
1064
change,
1065
onto,
1066
into_working_copy,
1067
} => workspace:: rebase( & change, & onto, into_working_copy) ,
957fee30 Andy McCall 1 month ago ↶
1068
Cmd:: Blame { path, json } => workspace:: blame( & path, json) ,
1069
Cmd:: Bisect { cmd } => match cmd {
1070
BisectCmd:: Start => workspace:: bisect_start( ) ,
1071
BisectCmd:: Good { changes } => workspace:: bisect_mark( Some ( true ) , & changes) ,
1072
BisectCmd:: Bad { changes } => workspace:: bisect_mark( Some ( false ) , & changes) ,
1073
BisectCmd:: Skip => workspace:: bisect_mark( None , & [ ] ) ,
1074
BisectCmd:: Run { command } => workspace:: bisect_run( & command) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1075
BisectCmd:: Status { json } => workspace:: bisect_status( json) ,
957fee30 Andy McCall 1 month ago ↶
1076
BisectCmd:: Reset => workspace:: bisect_reset( ) ,
1077
} ,
75167672 Andy McCall 1 month ago
1078
Cmd:: Log {
1079
limit,
1080
verbose,
1081
path,
83d61e80 Andy McCall 1 month ago ↶
1082
lines,
75167672 Andy McCall 1 month ago
1083
json,
83d61e80 Andy McCall 1 month ago ↶
1084
} => workspace:: log( limit, verbose, path.as_deref ( ) , lines.as_deref ( ) , json) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1085
Cmd:: Diff { change, json } => workspace:: diff( change.as_deref ( ) , json) ,
6a81dbab Andy McCall 1 month ago ↶
1086
Cmd:: Describe {
1087
message,
1088
change,
1089
json,
1090
} => match message {
1091
Some ( m) => workspace:: describe( & m, change.as_deref ( ) ) ,
1092
None if change.is_some ( ) => {
1093
anyhow:: bail! (
1094
" naming works on the working copy; to change a head's message pass -m"
1095
)
1096
}
1097
None => workspace:: describe_name( json) ,
1098
} ,
23b217d7 Andy McCall 1 month ago ↶
1099
Cmd:: Amend { message, into } => workspace:: amend( message.as_deref ( ) , into.as_deref ( ) ) ,
1100
Cmd:: Split { change, paths } => workspace:: split( & change, & paths) ,
614541c3 Andy McCall 1 month ago ↶
1101
Cmd:: Abandon { change } => workspace:: abandon( & change) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1102
Cmd:: Show { change, json } => workspace:: show( & change, json) ,
1c2bd9ab Andy McCall 1 month ago ↶
1103
Cmd:: Checkout {
1104
changes,
1105
discard,
1106
carry,
1107
} => workspace:: checkout( & changes, discard, carry) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1108
Cmd:: Resolve { json } => workspace:: resolve( json) ,
fce44ae9 Andy McCall 1 month ago ↶
1109
Cmd:: Undo => workspace:: undo( ) ,
ba160f60 Andy McCall 1 month ago ↶
1110
Cmd:: Gc { now } => workspace:: gc( now) ,
387335ff Andy McCall 1 month ago ↶
1111
Cmd:: Fsck { json } => workspace:: fsck( json) ,
3e5772cc Andy McCall 1 month ago ↶
1112
Cmd:: Doctor { offline, json } => workspace:: doctor( offline, json) ,
252e8cb2 Andy McCall 1 month ago ↶
1113
Cmd:: Checkpoint => workspace:: checkpoint( ) ,
98a1620a Andy McCall 1 month ago ↶
1114
Cmd:: Op { cmd } => match cmd {
1115
OpCmd:: Log { limit, json } => workspace:: op_log( limit, json) ,
1116
OpCmd:: Restore { op, discard } => workspace:: op_restore( & op, discard) ,
1117
OpCmd:: Revert { op } => workspace:: op_revert( & op) ,
1118
} ,
75167672 Andy McCall 1 month ago
1119
Cmd:: Clone {
1120
url,
1121
dest,
1122
max_blob,
1123
sparse,
1124
depth,
14edbaaf Andy McCall 1 month ago ↶
1125
recursive,
1126
} => sync:: clone( & url, dest, max_blob.as_deref ( ) , & sparse, depth, recursive) ,
2863456a Andy McCall 1 month ago ↶
1127
Cmd:: Deepen { depth, remote } => sync:: deepen( & remote, depth) ,
7421309f Andy McCall 1 month ago ↶
1128
Cmd:: Sparse { paths } => workspace:: sparse( & paths) ,
cdb5beba Andy McCall 1 month ago ↶
1129
Cmd:: Lock { path } => workspace:: lock( & path) ,
1130
Cmd:: Unlock { path } => workspace:: unlock( & path) ,
4e88e774 Andy McCall 1 month ago ↶
1131
Cmd:: Workspace { cmd } => match cmd {
1132
WorkspaceCmd:: Add { path, changes } => workspace:: workspace_add( & path, & changes) ,
1196b29b Andy McCall 1 month ago ↶
1133
WorkspaceCmd:: List { json } => workspace:: workspace_list( json) ,
4e88e774 Andy McCall 1 month ago ↶
1134
WorkspaceCmd:: Forget { workspace } => workspace:: workspace_forget( & workspace) ,
1135
} ,
7b9809e6 Andy McCall 1 month ago ↶
1136
Cmd:: Bookmark { cmd } => match cmd {
4fe7d604 Andy McCall 1 month ago ↶
1137
BookmarkCmd:: Create {
1138
name,
1139
changes,
1140
upto,
1141
only,
1142
} => workspace:: bookmark_create( & name, & changes, upto, only) ,
06d16dc2 Andy McCall 1 month ago ↶
1143
BookmarkCmd:: Set {
1144
name,
1145
changes,
1146
upto,
1147
only,
1148
} => workspace:: bookmark_set( & name, & changes, upto, only) ,
7b9809e6 Andy McCall 1 month ago ↶
1149
BookmarkCmd:: Delete { name } => workspace:: bookmark_delete( & name) ,
14edbaaf Andy McCall 1 month ago ↶
1150
BookmarkCmd:: List { all, json } => workspace:: bookmark_list( all, json) ,
61e3bce7 Andy McCall 1 month ago ↶
1151
BookmarkCmd:: Switch {
1152
name,
1153
discard,
1154
carry,
1155
} => workspace:: bookmark_switch( & name, discard, carry) ,
7b9809e6 Andy McCall 1 month ago ↶
1156
} ,
1157
Cmd:: Merge { bookmark } => workspace:: merge( & bookmark) ,
ff1f62fe Andy McCall 1 month ago ↶
1158
Cmd:: Auth { cmd } => match cmd {
1159
AuthCmd:: Login {
1160
hub,
1161
with_token,
1162
ca,
1163
} => auth:: login( hub.as_deref ( ) , with_token, ca) ,
1164
AuthCmd:: Status => auth:: status( ) ,
1165
AuthCmd:: Logout { hub } => auth:: logout( hub.as_deref ( ) ) ,
1166
} ,
4dee277c Andy McCall 1 month ago ↶
1167
Cmd:: Submodule { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1168
SubmoduleCmd:: Add {
1169
url,
1170
path,
1171
bookmark,
1172
} => sync:: submodule_add( & url, & path, bookmark.as_deref ( ) ) ,
4dee277c Andy McCall 1 month ago ↶
1173
SubmoduleCmd:: Update { init, paths } => sync:: submodule_update( init, & paths) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1174
SubmoduleCmd:: Status { json } => sync:: submodule_status( json) ,
4dee277c Andy McCall 1 month ago ↶
1175
SubmoduleCmd:: Remove { path } => sync:: submodule_remove( & path) ,
fc1a466a Andy McCall 1 month ago ↶
1176
} ,
1177
Cmd:: Receipt { cmd } => match cmd {
1178
ReceiptCmd:: List { rev, json } => receipt:: list( rev.as_deref ( ) , json) ,
1179
ReceiptCmd:: Show {
1180
receipt: r,
1181
rev,
1182
json,
1183
} => receipt:: show( & r, rev.as_deref ( ) , json) ,
1184
ReceiptCmd:: Export {
1185
receipt: r,
1186
file,
1187
rev,
1188
} => receipt:: export( & r, & file, rev.as_deref ( ) ) ,
1189
ReceiptCmd:: Verify { file, json } => receipt:: verify( & file, json) ,
1190
ReceiptCmd:: Import { file } => receipt:: import( & file) ,
4dee277c Andy McCall 1 month ago ↶
1191
} ,
132b884b Andy McCall 1 month ago ↶
1192
Cmd:: Tag { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1193
TagCmd:: Create {
1194
name,
1195
changes,
1196
message,
1197
} => workspace:: tag_create( & name, & changes, & message) ,
1196b29b Andy McCall 1 month ago ↶
1198
TagCmd:: List { json } => workspace:: tag_list( json) ,
132b884b Andy McCall 1 month ago ↶
1199
} ,
fce44ae9 Andy McCall 1 month ago ↶
1200
Cmd:: Remote { cmd } => match cmd {
9aa39904 Andy McCall 1 month ago ↶
1201
RemoteCmd:: Add {
1202
name,
1203
url,
1204
profile,
1205
region,
1206
endpoint,
1207
credentials,
1208
} => sync:: remote_add(
1209
& name,
1210
& url,
1211
& [
1212
( " profile" , profile) ,
1213
( " region" , region) ,
1214
( " endpoint" , endpoint) ,
1215
( " credentials" , credentials) ,
1216
] ,
1217
) ,
1218
RemoteCmd:: Check { name } => sync:: remote_check( & name) ,
fce44ae9 Andy McCall 1 month ago ↶
1219
RemoteCmd:: Remove { name } => sync:: remote_remove( & name) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1220
RemoteCmd:: List { json } => sync:: remote_list( json) ,
fce44ae9 Andy McCall 1 month ago ↶
1221
} ,
c6aa5bd9 Andy McCall 1 month ago ↶
1222
Cmd:: Fetch { remote, json } => sync:: fetch( remote.as_deref ( ) , json) ,
1223
Cmd:: Pull { remote, json } => sync:: pull( remote.as_deref ( ) , json) ,
75167672 Andy McCall 1 month ago
1224
Cmd:: Push {
1225
remote,
1226
force,
1227
bookmark,
f8c69576 Andy McCall 1 month ago ↶
1228
delete,
75167672 Andy McCall 1 month ago
1229
json,
f8c69576 Andy McCall 1 month ago ↶
1230
} => match delete {
1231
Some ( name) => sync:: push_delete( remote.as_deref ( ) , & name, json) ,
1232
None => sync:: push( remote.as_deref ( ) , force, bookmark.as_deref ( ) , json) ,
1233
} ,
75167672 Andy McCall 1 month ago
1234
Cmd:: Serve {
1235
root,
1236
bind,
1237
tokens,
1238
tls_cert,
1239
tls_key,
1240
} => sync:: serve( root, & bind, tokens, tls_cert.zip ( tls_key) ) ,
fce44ae9 Andy McCall 1 month ago ↶
1241
Cmd:: Identity { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1242
IdentityCmd:: Create {
1243
name,
1244
email,
1245
local,
1246
expires,
1247
} => identity:: create( name, email, local, expires) ,
fce44ae9 Andy McCall 1 month ago ↶
1248
IdentityCmd:: Show => identity:: show( ) ,
83e0677b Andy McCall 1 month ago ↶
1249
IdentityCmd:: Export { path } => identity:: export( path) ,
119bbf50 Andy McCall 1 month ago ↶
1250
IdentityCmd:: SignChallenge { challenge, json } => {
1251
identity:: sign_challenge( & challenge, json)
1252
}
28fc23d7 Andy McCall 1 month ago ↶
1253
IdentityCmd:: Rotate => identity:: rotate( ) ,
1254
IdentityCmd:: Renew { expires } => identity:: renew( expires) ,
1255
IdentityCmd:: Revoke { key, reason } => identity:: revoke( key.as_deref ( ) , & reason) ,
1256
IdentityCmd:: Delegate { cmd } => match cmd {
1257
DelegateCmd:: Add { identity_file } => identity:: delegate_add( & identity_file) ,
1258
DelegateCmd:: Remove { key } => identity:: delegate_remove( & key) ,
1259
DelegateCmd:: List => identity:: delegate_list( ) ,
1260
} ,
83e0677b Andy McCall 1 month ago ↶
1261
} ,
75167672 Andy McCall 1 month ago
1262
Cmd:: Git {
1263
cmd: GitCmd:: Export { git_dir, branch } ,
1264
} => sync:: git_export( & git_dir, branch.as_deref ( ) ) ,
1265
Cmd:: Git {
1266
cmd: GitCmd:: Fetch { url, branch } ,
1267
} => sync:: git_fetch( & url, & branch) ,
1268
Cmd:: Git {
1269
cmd: GitCmd:: Push { url, branch } ,
1270
} => sync:: git_push( & url, & branch) ,
1271
Cmd:: Git {
1272
cmd:
1273
GitCmd:: Import {
1274
git_dir,
1275
dest,
1276
branch,
1277
} ,
1278
} => sync:: git_import( & git_dir, & dest, & branch) ,
62794ecc Andy McCall 1 month ago ↶
1279
Cmd:: Git {
1280
cmd: GitCmd:: Verify { git_dir, branch } ,
1281
} => sync:: git_verify( & git_dir, & branch) ,
83e0677b Andy McCall 1 month ago ↶
1282
Cmd:: Policy { cmd } => match cmd {
1283
PolicyCmd:: Init => identity:: policy_init( ) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1284
PolicyCmd:: Show { json } => identity:: policy_show( json) ,
75167672 Andy McCall 1 month ago
1285
PolicyCmd:: Grant {
1286
identity_file,
1287
pattern,
1288
out,
1289
} => identity:: policy_grant( & identity_file, pattern.as_deref ( ) , out) ,
28fc23d7 Andy McCall 1 month ago ↶
1290
PolicyCmd:: Revoke { key, out } => identity:: policy_revoke( & key, out) ,
1291
PolicyCmd:: Root { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1292
RootCmd:: Add { identity_file, out } => {
1293
identity:: policy_root_add( & identity_file, out)
1294
}
28fc23d7 Andy McCall 1 month ago ↶
1295
RootCmd:: Remove { key, out } => identity:: policy_root_remove( & key, out) ,
1296
RootCmd:: Threshold { n, out } => identity:: policy_threshold( n, out) ,
1297
} ,
1298
PolicyCmd:: Sign { proposal, out } => identity:: policy_sign( & proposal, out) ,
fce44ae9 Andy McCall 1 month ago ↶
1299
} ,
4213c41d Andy McCall 1 month ago ↶
1300
Cmd:: Seal {
1301
changes,
1302
proposal: Some ( url) ,
1303
json,
1304
} if changes.is_empty ( ) => proposal:: seal( & url, json) ,
d82e4409 Andy McCall 1 month ago ↶
1305
Cmd:: Seal { changes, json, .. } => identity:: seal( & changes, json) ,
1306
Cmd:: Proposal { cmd } => match cmd {
1307
ProposalCmd:: Show { url, json } => proposal:: show( & url, json) ,
1308
ProposalCmd:: Land { url, force } => proposal:: land( & url, force) ,
1309
} ,
c6aa5bd9 Andy McCall 1 month ago ↶
1310
Cmd:: Verify { change, json } => identity:: verify( change.as_deref ( ) , json) ,
fce44ae9 Andy McCall 1 month ago ↶
1311
Cmd:: Config { key, value, user } => identity:: config( & key, & value, user) ,
1312
}
1313
}
d42369ab Andy McCall 1 month ago
1314
1315
# [ cfg ( test ) ]
1316
mod help_tests {
1317
use super :: Cli;
1318
use clap:: CommandFactory;
1319
1320
1321
1322
# [ test ]
1323
fn every_command_and_argument_has_help ( ) {
1324
fn walk ( cmd : & clap:: Command, path : & str , missing : & mut Vec< String> ) {
1325
let here = format! ( " {path} {} " , cmd.get_name ( ) ) .trim ( ) .to_string ( ) ;
1326
if cmd.get_about ( ) .is_none ( ) & & path ! = " " {
1327
missing.push ( format! ( " {here} (command)" ) ) ;
1328
}
1329
for a in cmd.get_arguments ( ) {
1330
let id = a.get_id ( ) .as_str ( ) ;
1331
if id = = " help" | | id = = " version" | | a.is_global_set ( ) & & path ! = " " {
1332
continue ;
1333
}
1334
if a.get_help ( ) .is_none ( ) & & a.get_long_help ( ) .is_none ( ) {
1335
missing.push ( format! ( " {here} {id} " ) ) ;
1336
}
1337
}
1338
for sub in cmd.get_subcommands ( ) {
1339
walk ( sub, & here, missing) ;
1340
}
1341
}
1342
let mut missing = Vec :: new( ) ;
1343
walk ( & Cli:: command( ) , " " , & mut missing) ;
1344
assert! (
1345
missing.is_empty ( ) ,
1346
" {} without help:\n {}" ,
1347
missing.len ( ) ,
1348
missing.join ( " \n " )
1349
) ;
1350
}
1351
}