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