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