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