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