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