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