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