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