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