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