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