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