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