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