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