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